模板層(變量,過濾器,標簽,自定義過濾器標簽,模板導入與繼承,靜態(tài)文件導入)

目錄

  1. 變量
  2. 過濾器
  3. 標簽
  4. 自定義過濾器與標簽
  5. 模板的導入
  6. 母版的繼承
  7. 靜態(tài)文件的導入

關于視圖函數(shù)的返回數(shù)據(jù)

之前是return render(request,'index.html',{'name':name}), 需要將變量一個一個的傳入字典

locals() 會把該視圖函數(shù)內的變量,傳到模板

return render(request, 'index.html', locals())

1. 變量

{{ 變量名 }}

<p>字符串:{{ name }}</p>
<p>數(shù)字:{{ age }}</p>
<p>列表:{{ lis }}</p>
<p>元祖:{{ tu }}</p>
<p>字典:{{ dic }}</p>

{{ 函數(shù)名 }} 相當于print(函數(shù)名()) 打印函數(shù)的返回值 , 不能調用有參數(shù)的函數(shù)

對象:

<p>對象:{{ user }}</p>  打印了對象的內存地址
<p>對象:{{ user.name }}</p>  打印了對象的屬性

深度查詢

采用點的形式

<p>列表第0個值:{{ lis.0 }}</p>
<p>列表第3個值:{{ lis.3 }}</p>
<p>字典取值:{{ dic.name }}</p>
<p>對象方法:{{ user.get_name }}</p>

2. 過濾器

語法:{{ 參數(shù)|過濾器名字 }}{{ 參數(shù)|過濾器名字:'第二個參數(shù)'}}

length: 統(tǒng)計字符串長度
<p>統(tǒng)計字符串長度:{{ 'hello world'|length }}</p>
default
<p>過濾器之默認值:{{ lis|default:'沒有值' }}</p>
filesizeformat : 將一串數(shù)字轉化為對應的數(shù)據(jù)大小 , eg: 1024 ==> 1 KB 1049000 ==> 1 MB
<p>過濾器之filesizeformat--1:{{ 1024|filesizeformat }}</p>
date :格式化時間
<p>過濾器之不使用date:{{ ctim }}</p>
<p>過濾器之date:{{ ctim|date:'Y-m-d' }}</p>
slice 切分 , 與python用法相同, 支持步長
<p>過濾器之slice:{{ lis|slice:'2:-1' }}</p>
{#支持步長#}
<p>過濾器之slice-字符串:{{ name|slice:'0:3:3' }}</p>
truncatechars 截取字符 , 剩余的部分以...顯示 , 注意: ...也算入截取的長度 , 所以 ,三個起步
<p>過濾器之truncatechars:{{ 'dafddfap'|truncatechars:5 }}</p>
結果 : da...
truncatewords 截取單詞 , 注意這個...不算入長度
<p>過濾器之truncatewords:{{ '我 dfa ga dfs 你 dgf daf'|truncatewords:5 }}</p>
結果 : 我 dfa ga dfs 你...
safe 變量默認不解析 , 加上safe會被瀏覽器解析
{{ '<script>alert(666)</script>'|safe }}
add 傳兩個參數(shù) , 兩個數(shù)字 , 計算和 , 兩個字符串 ,拼接
<p>過濾器之用add:{{ 12|add:'1' }}</p>
<p>過濾器之用add:{{ 'egon'|add:'dsb' }}</p>

3. 標簽

for

語法

{% for i in lis %}
{% endfor %}
{% for foo in lis %}
    {{ forloop }} ==> for循環(huán)特有標簽 , 只有在for標簽內才能使用 
    ```
    內容有
    第一次循環(huán)的{'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 5, 'revcounter0': 4, 'first': True, 'last': False} 
    最后一次循環(huán){'parentloop': {}, 'counter0': 4, 'counter': 5, 'revcounter': 1, 'revcounter0': 0, 'first': False, 'last': True}
    ```
    {{% empty %}}當被循環(huán)的對象為空時走這一步 
    <p>被循環(huán)的對象為空啊</p>
{% endfor %}


只循環(huán)字典的話,取到的是key值
{% for foo in dic %}
取到value的值
{% for foo in dic.values %}
取到key 和 value的值
{% for k,foo in dic.items %}


if

語法

{% if 2 == 1 %}
{% elif 2 == 3 %}
{% else %}
{% endif %}
{% if user %}
    <a href="">退出</a>
{% else %}
    <a href="">登錄</a>
    <a href="">注冊</a>
{% endif %}
with 相當于取別名,作用:變量太長,可以簡化

語法

{% with 原名 as 新名字 %}
{% endwith %}
{% with name as ttt %}
    {{ ttt }}
    {{ name }}
{% endwith %}

注意 : 過濾器,可以用在if判斷中使用 , 標簽不可以

4. 自定義過濾器與標簽

自定義過濾器

1 先在setting中注冊app
2 在app下創(chuàng)建一個templatetags(名字不能變)的文件夾(模塊)
3 在模塊下創(chuàng)建一個py文件,名字隨意:mytag.py
4 在此py文件里,
    4.1 導入template  
        from django.template import Library
    4.2 定義一個叫register的變量=template.Library()
        register = Library() 變量名不能變
    4.3 寫一個函數(shù),用@register.filter(name='yyy')裝飾一下(可以指定別名)
        def str_add(str1, str2): #一定要有返回值
            處理復雜的業(yè)務邏輯
            return str1 + str2
5 定義完標簽以后重啟服務器
6 模板里使用
    {% load mytag %}       將剛創(chuàng)建的py文件load過來
    {{'lqz'|str_add:'nb'}}  使用

自定義標簽

與自定義過濾器用法類似

只需將4.3的裝飾器改為

@register.simple_tag()
def add_nb(value):
    return value+'nb'

使用時 多個參數(shù)用空格隔開

<p>{% load mytag %}</p>
<p>{% add_nb 'lqz' %}</p>

5. 模板的導入

  1. 新建一個html文件 , 里面寫模板(組件)
  2. 在需要用到這個模板(組件)的地方{% include '模板的名字'%} 注 , 模板的名字就是上一步html的文件名

6. 母版的繼承

例如導航欄, 側邊欄每個頁面都需要用到 , 寫一個母版 , 在每個頁面繼承這個母版就可以了

  1. 寫一個母版,留一個可擴展的區(qū)域(盒子),可以留多個盒子(留的越多,可擴展性越高)

    {%block 名字%}
     可以寫內容
    {%endblock%}
    
    
  2. 在子模板中使用:

    {% extends 'base.html' %} 繼承母版
    
    {%block 名字%}
     在母版區(qū)域填充的子模板的內容
         在母版區(qū)域不是寫內容了嘛, 要是需要用到母版寫的內容用下面這個東西
         {{ block.super }}
    {%endblock 名字%}
    

7. 靜態(tài)文件的導入

  1. 寫死靜態(tài)文件:<link rel="stylesheet" href="/static/css/mycss.css">

  2. 使用 static標簽函數(shù):

    {%load static%}
     #static返回值,會拼上傳參的路徑
    {% static "css/mycss.css"%}
    
    eg:
    <link rel="stylesheet" href="{% static "css/mycss.css"%}">
    
  3. 使用get_static_prefix 標簽

    {%load static%}
     #get_static_prefix返回值是:靜態(tài)文件的地址,相當于/static/
    {% get_static_prefix %}css/mycss.css
    eg:
    <link rel="stylesheet" href="{% get_static_prefix %}css/mycss.css">
    
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。