1. 程式人生 > 實用技巧 >Django基礎四之模板系統

Django基礎四之模板系統

自定標籤和過濾器

自定義過濾器

1. app應用資料夾中建立一個templatetags檔案件,必須是這個名字
2. templatetags資料夾中建立一個 xx.py檔案,檔名字隨便起

3. 建立自定義過濾器
    from django import template

    register = template.Library()  #register固定的名字,註冊器

    # @register.filter
    # def oo(v1,v2):  #不帶引數的過濾器
    #     s = v1 + 'xxoo'

    #     return s

    @register.filter
    def oo(v1,v2):  #帶引數的過濾器
        s = v1 + v2
        return s
    
4. 使用  html檔案中  {% load 檔名 %} 
    {% load xx %}
    {{ values|oo }} -- 無引數
    {{ values|oo:'asdf' }} -- 有引數

5. 注意:引數最多兩個


自定義標籤
1. app應用資料夾中建立一個templatetags檔案件,必須是這個名字
2. templatetags資料夾中建立一個 xx.py檔案,檔名字隨便起
3. 建立自定義標籤
    @register.simple_tag
    def mytag(v1,v2,v3):  
        s = v1 + '和B哥' + v2 + v3
        return s

4.使用
    {% load xx %}
    {% mytag s1 '和相璽' '和大壯' %}  
5. #可以傳多個引數

inclusion_tag

1. app應用資料夾中建立一個templatetags檔案件,必須是這個名字
2. templatetags資料夾中建立一個 xx.py檔案,檔名字隨便起
3. 建立自定義inclusion_tag
    @register.inclusion_tag('inclusiontag.html')
    def func(v1):

        return {'oo':v1}
4. func的return資料,傳給了inclusiontag.html,作為模板渲染的資料,將inclusiontag.html渲染好之後,作為一個元件,生成到呼叫這個func的地方
5. 使用
    {% load xx %}
    {% func l1 %}

靜態檔案配置

js、css、img等都叫做靜態檔案,那麼關於django中靜態檔案的配置,我們就需要在settings配置檔案裡面寫上這寫內容:

1 在專案中建立一個資料夾,比如叫jingtaiwenjian

# STATIC_URL = '/xxx/' #別名,隨便寫名字,但是如果你改名字,別忘了前面頁面裡面如果你是通過/xxx/bootstrap.css的時候,如果這裡的別名你改成了/static/的話,你前端頁面的路徑要改成/static/bootstrap.css。所以我們都是用下面的load static的方式來使用靜態檔案路徑
2 STATIC_URL = '/static/' #別名

3 STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'jingtaiwenjian'), #注意別忘了寫逗號,第二個引數就是專案中你存放靜態檔案的資料夾名稱
]

目錄:別名也是一種安全機制,瀏覽器上通過除錯臺你能夠看到的是別名的名字,這樣別人就不能知道你靜態資料夾的名字了,不然別人就能通過這個資料夾路徑進行攻擊。

    

 前端頁面引入靜態檔案的寫法,因為別名也可能會修改,所以使用路徑的時候通過load static來找到別名,通過別名對映路徑的方式來獲取靜態檔案

    

{% static %}

{% load static %}<img src="{% static "images/hi.jpg" %}" alt="Hi!" />

引用JS檔案時使用:

{% load static %}
<script src="{% static "mytest.js" %}"></script>

某個檔案多處被用到可以存為一個變數

{% load static %}
{% static "images/hi.jpg" as myphoto %}
<img src="{{ myphoto }}"></img>

{% get_static_prefix %}

{% load static %}
<img src="{% get_static_prefix %}images/hi.jpg" alt="Hi!" />

或者

{% load static %}
{% get_static_prefix as STATIC_PREFIX %}

<img src="{{ STATIC_PREFIX }}images/hi.jpg" alt="Hi!" />
<img src="{{ STATIC_PREFIX }}images/hi2.jpg" alt="Hello!" />

orm

orm  -- Object Relational Mapping

將類物件 --- sql

類  --  表

物件 -- 行

屬性  -- 欄位
app01 應用下 的models.py檔案中寫
    class UserInfo(models.Model):

        id = models.AutoField(primary_key=True)

        name = models.CharField(max_length=16,null=True,blank=True,db_index=True)

        age = models.IntegerField(default=1,unique=True,choices=((1,'男'),(2,'女'),(3,'二椅子')))

        current_date = models.DateField(auto_now=True,auto_now_add=True)

不連線mysql的話,預設連線的是sqlite資料庫

配置連線mysql
1 settings.py 檔案中找DATABASES這個配置,改為
    # DATABASES = {
    #     'default': {
    #         'ENGINE': 'django.db.backends.sqlite3',
    #         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    #     }
    # }

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST':'127.0.0.1',
            'PORT':3306,
            'NAME':'orm01',
            'USER':'root',
            'PASSWORD':'123',
        }
    }

2 專案資料夾下的init檔案中,寫上下面兩句
    import pymysql
    pymysql.install_as_MySQLdb()

3 執行資料庫同步指令
    python manage.py makemigrations
    python manage.py migrate