只須要記兩種特殊符號: {{ }}和 {% %} 變量相關的用 {{}}, 邏輯相關的用 {%%}。
語法: {{ value|filter_name:參數 }} default {{ value|default: "nothing"}} 若是value值沒傳的話就顯示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"}}
date 格式化 {{ value|date:"Y-m-d H:i:s"}}
safe Django的模板中會對HTML標籤和JS等語法標籤進行自動轉義,
緣由顯而易見,這樣是爲了安全。可是有的時候咱們可能不但願這些HTML元素被轉義,好比咱們作一個內容管理系統,後臺添加的文章中是通過修飾的,
這些修飾多是經過一個相似於FCKeditor編輯加註了HTML修飾符的文本,若是自動轉義的話顯示的就是保護HTML標籤的源文件。爲了在Django中關閉HTML的自動轉義有兩種方式,
若是是一個單獨的變量咱們能夠經過過濾器「|safe」的方式告訴Django這段代碼是安全的沒必要轉義。 好比: value = "<a href='#'>點我</a>" {{ value|safe}}
1. 在app新建一個 templatetags 包 css
app01/
__init__.py
models.py
templatetags/ # 在app01下面新建一個包
__init__.py
app01_filters.py # 建一個存放自定義filter的文件
views.pyhtml
2. 新建一個py文件,起個名字xx
3. 內部定義一個實現提供具體功能函數,按照固定的寫法註冊到django的模板語言中
from django import template
register = template.Library()
@register.filter()
def add_sb(value):
return value + " sb"
4. 重啓
5. 實際調用
1. 先導入新建的py文件名字
{% load app01_filters %}
2. 調用本身寫的filter
{{ value|add_sb }}django
for ... empty數組
<ul> {% for user in user_list %} <li>{{ user.name }}</li> {% empty %} <li>空空如也</li> {% endfor %} </ul>
if,elif和
else
安全
{% if user_list %} 用戶人數:{{ user_list|length }} {% elif black_list %} 黑名單數:{{ black_list|length }} {% else %} 沒有用戶 {% endif %}
if語句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判斷app
這個標籤用於跨站請求僞造保護(防釣魚網站)函數
<form action="" method="post">{% csrf_token %}
1. Django的模板語言不支持連續判斷post
{% if a > b > c %} ... {% endif %}
2. Django的模板語言中屬性的優先級大於方法網站
def xx(request): d = {"a": 1, "b": 2, "c": 3, "items": "100"} return render(request, "xx.html", {"data": d}) 如上,咱們在使用render方法渲染一個頁面的時候,傳的字典d有一個key是items而且還有默認的 d.items() 方法,此時在模板語言中: {{ data.items }} 默認會取d的items key的值。
1. 何時用模板和繼承? 減小代碼重複。當不少頁面大部分區域都相同,只有少部分不相同的時候能夠用! 2. 母版 - 繼承母版 {% extends 'base.html '%} - 根據塊的名字去替換母版中指定位置的內容 {% block ‘page-main’%} 自定義的內容 {% endblock %} - 根據實際需求定義子頁面纔用到的CSS和JS文件引用 {% block page-css %}{% endblock %} {% block page-js %}{% endblock %} 3. 組件 功能比較單一和獨立的html能夠單獨寫成一個組件 {% include 'nav.html'%}
在admin.py中只須要講Mode中的某個類註冊,便可在Admin中實現增刪改查的功能,如:spa
admin.site.register(models.UserInfo)
....
可是,這種方式比較簡單,若是想要進行更多的定製操做,須要利用ModelAdmin進行操做,如:
class UserAdmin(admin.ModelAdmin): #在後臺用戶展現頁面顯示更多的內容,如:phone,avatar list_display = ["phone","avatar"] #定製後臺展現頁面快速篩選 list_filter = ["blog"] #展現頁面顯示更多內容後定製能夠點擊跳轉項 list_display_links = ['phone','avatar'] #在展現頁面增長啊模糊搜索功能(若是添加多個字段,相互之間是or的關係) search_fields = ['phone','id'] #自定義後臺批量處理方法 #定義一個patch_init方法,函數名能夠隨意,queryset固定的 def patch_init(self,request,queryset): queryset.update(phone='+86'+models.UserInfo.phone) #給方法添加一個界面展現的簡單描述 patch_init.short_description = '批量在手機號前添加+86' #能夠自定義多個這種方法,可是都要添加到actiongs數組中 actions = [patch_init] admin.site.register(models.UserInfo)