Django模板系統和admin模塊

只須要記兩種特殊符號: {{ }}和 {% %} 變量相關的用 {{}}, 邏輯相關的用 {%%}。

Filters

語法: {{ 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}}

自定義filter

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循環可用的一些參數

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

csrf_token

這個標籤用於跨站請求僞造保護(防釣魚網站)函數

<form action="" method="post">{% csrf_token %}

Django的模板語言注意事項:

  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的定製

在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)
相關文章
相關標籤/搜索