Django 模板語法


Django官方文檔

可見https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#std:templatetag-for

和python一樣,Django也有自己的語法

后台向模板傳遞對象

傳函數名到前端,會自動加括號調用,但是不支持傳參

對象:打印了這個對象  

 

 

 

 

 

Django模板語法

兩種標記符號

{{  }}   與變量相關 

{% %}與語法相關

遇到點號(.)查詢優先級

1.字典的值             最高

2.屬性或方法查詢  其次

3.數字索引查詢      最低

 

 

 

變量

通過索引:

  列表.索引值

通過方法:

  但是只能使用不帶參數的語法

過濾器 針對遍歷

本質:把管道左邊當作第一個參數傳遞給右邊的方法

values   
{{ value|default:"nothing"}}
如果values是False或null 使用默認值nothing

length
{{ value|length }}
計算value 長度


filesizeformat
格式化文件大小
{{ value|length }}

slice
切片字符串
{{value|slice:"2:-1"}}

date
沒有%
{{ value|date:"Y-m-d H:i:s"}}

    truncatechars 

    {{ value|truncatechars:9}}  value大於多於多少長度 剩下部分用省略號表示

 

    truncatewords  {{ value|truncatechars:9}}   相當於按照空格切片取values個分組    
如:haha1 hahah2 hahaha3 haahha4 hahah5 ha5 ah6   values3就是 haha1 hahah2 hahaha3


cut
{{ value|cut:' ' }}
移除value中所有的與給出的變量相同的字符串

 join

str.join(list) 



 
         

 

  

 safe 

在前端取消轉移 變為html代碼

{{ dict_obj.name|safe }}

后端:from django.utils.safestring import mark_safe
xxx = mark_safe('<h1>我是h1標簽</h1>') #把xxx轉為真正安全的html代碼

 

標簽

for循環

{% for foo in l %}
	<p>{{ foo }}</p>
	<p>{{ forloop }}</p>
{% endfor %}
forloop 是一個字典  {'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 5, 'revcounter0': 4, 'first': True, 'last': False} 
parentloop 是上級循環
forloop

{% empty %}和 {% endfor %} 同級
<ul>
{% for user in user_list %}
    <li>{{ user.name }}</li>
{% empty %}
    <li>空空如也</li>
{% endfor %}
</ul>

  

if判斷

{% if a %}
  you a
{% elif b %}
  you b
{% else %}
  沒有用戶
{% endif %}

  

with 別名

{% with total=business.employees.count %}
    {{ total }} employee{{ total|pluralize }}
{% endwith %}

 或者

{% with business.employees.count as total %}
    {{ total }} employee{{ total|pluralize }}
{% endwith %}

自定義 過濾器 標簽   inclusion_tag

自定義過濾器(最多一個參數)

1.在app下新建 templatetags

2.建立py

3. 導入

from djago import template

register = template.Library()

4.過濾器由  @register.filter(name="cut") 裝飾

5.返回結果

@register.filter(name="cut")
def cut(value, arg):
    return value.replace(arg, "")

6 導入py文件 

{{ somevariable|cut:"0" }}
{{ d.name|addSB }}

 

自定義標簽

@register.simple_tag
def plus(a,b,c):
  return a+b+c

{% plus 1 2 3 %}  用的是方法

 

自定義inclusion_tag

如果提示  Django: is not a registered tag library.

在setting.py

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')]
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        'libraries': {
            "my_tag": "app01.templatetags.xxx",
        },
        },
    },
]

 

{% 別名 參數%} 拿到頁面

 

 模板的繼承與導入

一般來說 我們模塊的話有三個塊  一個JS塊一個內容 一個css

 

 

 

 

 

 

如果要繼承原來的

{{ block.super }}

 

 

 

 導入組件

{% include "cbs.html" %}

靜態文件相關

{% load static %}
<img src="{% static 'images/hi.jpg' %}" alt="Hi!" />
起別名:方便導入{% static "images/hi.jpg" as myphoto %}



 

 

 

 

 

 

 

 

 

 

 

 

 

 

常用語法:{{ XXX}},{% xxx %}

舉個例子

def template_test(request):
    l = [11, 22, 33] d = {"name": "alex"} class Person(object): def __init__(self, name, age): self.name = name self.age = age def dream(self): return "{} is dream...".format(self.name) Alex = Person(name="Alex", age=34) Egon = Person(name="Egon", age=9000) Eva_J = Person(name="Eva_J", age=18) person_list = [Alex, Egon, Eva_J] return render(request, "template_test.html", {"l": l, "d": d, "person_list": person_list})

然后在 template_test.html 可以引用這個變量

 
        
{# 取l中的第一個參數 #}
{{ l.0 }}
{# 取字典中key的值 #}
{{ d.name }} {# 取對象的name屬性 #} {{ person_list.0.name }} {# .操作只能調用不帶參數的方法 #} {{ person_list.0.dream }}

Filters(過濾器)

在Django的模板語言中,通過使用 過濾器 來改變變量的顯示。

過濾器的語法: {{ value|filter_name:參數 }}

使用管道符"|"來應用過濾器。

例如:{{ name|lower }}會將name變量應用lower過濾器之后再顯示它的值。lower在這里的作用是將文本全都變成小寫。

注意事項:

  1. 過濾器支持“鏈式”操作。即一個過濾器的輸出作為另一個過濾器的輸入。
  2. 過濾器可以接受參數,例如:{{ sss|truncatewords:30 }},這將顯示sss的前30個詞。
  3. 過濾器參數包含空格的話,必須用引號包裹起來。比如使用逗號和空格去連接一個列表中的元素,如:{{ list|join:', ' }}
  4. '|'左右沒有空格沒有空格沒有空格

 

Django的模板語言中提供了大約六十個內置過濾器。

我們簡單介紹下里面常用的過濾器。

 

default

如果value沒有值 即為空,則賦值為nothing
{{ value|default:"nothing"}}

 

length

返回值的長度,作用於字符串和列表。

{{ value|length }}

返回value的長度,如 value=['a', 'b', 'c', 'd']的話,就顯示4.

 

filesizeformat

將值格式化為一個 “人類可讀的” 文件尺寸 (例如 '13 KB''4.1 MB''102 bytes', 等等)。例如:

{{ value|filesizeformat }}

如果 value 是 123456789,輸出將會是 117.7 MB。

slice

切片

{{value|slice:"2:-1"}}
如果value 是一個列表的話
如 value=['a', 'b', 'c', 'd']的話,就顯示
['c']

safe

不做介紹,一句話讓 字符串變為 HTML 代碼

 

我們簡單介紹下里面常用的模板

 

comment

注釋

{%  comment  "Optional note" %}
adasdasdasasdasd
{% endcomment %}

 

truncatechars

一定字符串之后顯示...例如我們常見網頁的詳解

{{ value|truncatechars:9}}

 

在介紹block之前我們先介紹下母版

cut

移除value中所有的與給出的變量相同的字符串

{{ value|cut:' ' }}
切掉空格

join

每個value字符串后拼一個內容

 

 

block

此模塊可以用來繼承母版

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM