django4-模板進階

1.模板系統的語法css

  引用變量數據: {{  }}html

  標籤邏輯操做:{%...%}後端

 

2.變量app

  變量名由字符數字下劃線組成 ,能夠執行由視圖函數傳過來的對象的方法和屬性 ,可是視圖函數中若是使用 ' . ' 執行對象的方法沒法傳參函數

#views.py
def test(request):
lst = []
dit = {}

class person:
def __init__(self, name, age):
self.name = name
self.age = age

def echo(self):
return '{}*{}歲'.format(self.name, self.age)

def __repr__(self):
return self.name
p1 = person('qgw', 12)
p2 = person('gwq', 15)
lst.append(p1)
lst.append(p2)

dit['p1'] = p1
dit['p2'] = p2
return render(request, 'test-n.html', {'l': lst, 'd': dit,'p1':p1})
#模板語法 ,不能使用括號() ,因此沒法傳參

列表
{# 取列表中的第一個參數,與後端索引相似 #}
{{ l.0 }}

字典  
若是有鍵是keys ,那麼優先級爲先找鍵 ,再去找屬性方法
{# 根據字典的key取值 #}
{{ d.name }}
{# 字典的方法items取出kv對 ,keys取出全部的k ,values取出全部的v #}
{{ d.items }}  {{ d.keys }}  {{ d.values }}

對象相關
{# 友好打印列表,返回一堆內存地址,這個調用了__repr__方法 ,重構repr便可 #}
{{ p1 }}
{# 取對象的name屬性 #}
{{ p1.name }}
{# .操做只能調用不帶參數的方法 #}
{{ p1.echo}}  

3. 變量二次處理oop

  變量可使用管道作二次處理 ,過濾器是一些已經定義好的處理方法 ,管道能夠有多個處理屢次url

  語法: {{ 變量|filter_name:參數 }}spa

  default   #給變量設置默認值設計

  add     #把變量拼接與參數code

  length    #把變量的長度打印出來 ,不能對int類型操做

  slice    #切片

  first     #第一個元素

  last     #最後一個元素

  date    #將日期格式化

  truncatechars  #保留指定長度字符串 ,後續變爲...

  safe    #若是是代碼 ,不加safe默認是不執行的 ,以字符串顯示 ,加了這個就能夠執行

 

4.標籤邏輯操做

  經常使用邏輯有 for if with csrf_token url ,可使用tab鍵補全格式

  1) for循環

    for循環內部可使用的一些方法

    forloop.counter      #打印本次循環是第幾回

    forloop.counter0       #打印本次循環是第幾回(從0開始)

    forloop.revcounter       #倒敘打印本次循環第幾回

    forloop.revcounter0     #倒敘打印本次循環第幾回(從0開始)

    forloop.first        #若是是第一次循環 ,返回true

    forloop.last        #若是是最後一次循環, 返回false

    forloop.parentloop     #打印外層循環 (多層循環使用) ,能夠在子循環中使用父循環的forloop的方法

    empty           #當整個for循環中empty以上代碼沒有生成 ,則執行empty下面的代碼

{% extends 'base.html' %}
{% block body1 %}
    <table class="table table-bordered">
        {% for objlst in data %}
            {% for obj in objlst %}
                <tr>
            {#將外層循環第一次的內容加上info顏色#}
                    <td {% if forloop.parentloop.first %}class='info'{% endif %}>{{ obj.name }}</td>
                    <td>{{ obj.age }}</td>
                    <td>{{ forloop.counter }}</td>
                </tr>
            {% endfor %}
        {% empty %}
            <h1>isnone</h1>
        {% endfor %}
    </table>
{% endblock %}

  2)if判斷

    if運用比較靈活能夠寫在一個標籤中 ,控制標籤的屬性 如: "<td {% if forloop.parentloop.first %}class='info'{% endif %}>{{ obj.name }}</td>"

{% extends 'base.html' %}
{% block body1 %}
    {% if 10 >= 9|add:2 %}        #add是加法和減法
        <h2>1</h2>
        {% else %}
        <h2>2</h2>
    {% endif %}
{% endblock %}

  3)with別名

     with別名區域 ,在指定區域中一個變量能夠經過別名方式引用

{% extends 'base.html' %}
{% block body1 %}
    {{ zheshiyige_obj.name }}

{#別名方式#}
    {% with zheshiyige_obj as obj %}
        {{ obj.name }}
    {% endwith %}
{% endblock %}

  

5.模板與繼承

  模板: 就是一個普通的html頁面 ,可是是公共部分 ,有效避免代碼重複 ,寫多個不一樣的block塊 ,子頁面中邏輯的內容放入block中 ,一般css和js的引用也會設計一個block

  子頁面繼承模板方法 :

    頁面第一行{% extends '模板.html' %}

    {% block 塊名 %}

    {% endblock %}

6.組件

  組件也是避免代碼重複 ,是一小塊代碼 ,須要給不少頁面使用

  組件使用 {% include 'html頁面' %}

#zj.html
<h2>這裏是oooo</h2>

#其餘頁面引用
{% include 'zj.html' %}

 

7.靜態文件配置名

  和路有別名做用差很少 ,爲了防止static靜態目錄名的變動 ,咱們將靜態目錄起個別名放在settings中 ,全部模板中引用靜態文件的時候 ,直接使用靜態文件別名或相對路徑便可

#settings.py
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')     #指定靜態文件的根目錄
]

#html頁面引用靜態文件
{% load static %}    #導入靜態文件

{% static '相對路徑文件名' %} #引用靜態文件
    
相關文章
相關標籤/搜索