Django ----- 模板

Django模板系統

官方文檔html

經常使用語法

Django模板中只須要記兩種特殊符號:python

{{ }}  和 {% %}django

{{ }} 表示變量,在模板渲染的時候替換成值安全

 {% %} 表示邏輯相關的操做.app

變量

 {{ 變量名}}ide

變量名由字母數字和下劃線組成.函數

點(.) 在模板語言中有特殊的含義,用來獲取對象的相應屬性值.spa

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})
例子
{# 取l中的第一個參數 #}
{{ l.0 }}
{# 取字典中key的值 #}
{{ d.name }}
{# 取對象的name屬性 #}
{{ person_list.0.name }}
{# .操做只能調用不帶參數的方法 #}
{{ person_list.0.dream }}
模板中支持的寫法

注意!!!!!!翻譯

  當模板系統遇到一個(.)時,會按照以下的順序去查詢code

  1,在字典中查詢

  2.屬性或者方法

  3.數字索引

Filters

 翻譯過來的意思是過濾器,用來修改變量的顯示結果

語法: {{ value|filter_name:參數}}

'|' 左右沒有空格沒有空!!!!!!!!!!!!!

default

{{ value | default:"nothing"}}

若是value值沒傳的話就顯示nothing

注意:TEMPLATES的OPTIONS能夠增長一個選項:string_if_invalid:'找不到',能夠替換default的做用.

fiesizeformat

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

例如

{{ value|filesizeformat}}

若是value 是123456789,輸出將會是117.7MB.

add

給變量加參數

{{value|add:'2'}}

value是數字4,則輸出結果爲6.

{{first|add:second}}

若是first[1,2,3] ,second是[4,5,6],那輸出結果就是[1,2,3,4,5,6]

lower

小寫

{{value|lower}}

upper

大寫

{{value|upper}}

title

標題

{{value|title}}

ljust

左對齊

"{{value|ljust:"10"}}"

center

居中

"{{value|center:"15"}}"

length

{{value|length}}

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

slice

切片

{{value|slice:"2:-1"}}

first

取第一個元素

{{value|first}}

last

取最後一個元素

{{value|last}}

join

使用字符串拼接列表,和python的str.join(list)同樣

{{value|join:"//"}}

truncatechars

若是字符串字符多餘指定的字符數量,那麼會被截斷.截斷的字符串將以可翻譯的省略號序列("...")結尾.

參數:截斷的字符數

{{value|truncatechars:9}}

date

日期格式化

{{value|data:"Y-m-d H:i:s"}}

safe

Django的模板中會對HTML標籤和JS等語法標籤進行自動轉義,緣由顯而易見,這樣是爲了安全。可是有的時候咱們可能不但願這些HTML元素被轉義,好比咱們作一個內容管理系統,後臺添加的文章中是通過修飾的,這些修飾多是經過一個相似於FCKeditor編輯加註了HTML修飾符的文本,若是自動轉義的話顯示的就是保護HTML標籤的源文件。爲了在Django中關閉HTML的自動轉義有兩種方式,若是是一個單獨的變量咱們能夠經過過濾器「|safe」的方式告訴Django這段代碼是安全的沒必要轉義。

好比:

value = "<a href="#">點我</a>"

{{value|safe}}

自定義filter

自定義過濾器只是帶有一個或兩個參數的Python函數:

  • 變量(輸入)的值 -- 不必定是一個字符串
  • 參數的值 - 這能夠有一個默認值,或徹底省略

例如,在過濾器{{var | foo:"bar"}}中,過濾器foo將傳遞變量var和參數"bar"

自定義filter代碼文件擺放位置:

app01/
    __init__.py
    models.py
    templatetags/  # 在app01下面新建一個package package
        __init__.py
        app01_filters.py  # 建一個存放自定義filter的py文件
    views.py

編寫自定義filter

from django import template
register = template.Library()


@register.filter
def fill(value, arg):
    return value.replace(" ", arg)


@register.filter(name="addSB")
def add_sb(value):
    return "{} SB".format(value)

使用自定義filter

{# 先導入咱們自定義filter那個文件 #}
{% load app01_filters %}

{# 使用咱們自定義的filter #}
{{ somevariable|fill:"__" }}
{{ d.name|addSB }}
相關文章
相關標籤/搜索