Django模板系统和admin模块
只需要記兩種特殊符號:{{ }}和 {% %}變量相關的用 {{}}, 邏輯相關的用 {%%}。
Filters
語法: {{ value|filter_name:參數 }}default{{ value|default: "nothing"}}
如果value值沒傳的話就顯示nothinglength{{ 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"}}
safeDjango的模板中會對HTML標簽和JS等語法標簽進行自動轉義,
原因顯而易見,這樣是為了安全。但是有的時候我們可能不希望這些HTML元素被轉義,比如我們做一個內容管理系統,后臺添加的文章中是經過修飾的,
這些修飾可能是通過一個類似于FCKeditor編輯加注了HTML修飾符的文本,如果自動轉義的話顯示的就是保護HTML標簽的源文件。為了在Django中關閉HTML的自動轉義有兩種方式,
如果是一個單獨的變量我們可以通過過濾器“|safe”的方式告訴Django這段代碼是安全的不必轉義。比如:value = "<a href='#'>點我</a>"{{ value|safe}} 自定義filter
1. 在app新建一個 templatetags 包
app01/
__init__.py
models.py
templatetags/ # 在app01下面新建一個包
__init__.py
app01_filters.py # 建一個存放自定義filter的文件
views.py
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 }}
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判斷
csrf_token
這個標簽用于跨站請求偽造保護(防釣魚網站)
<form action="" method="post">{% csrf_token %}
Django的模板語言注意事項:
1. Django的模板語言不支持連續判斷
{% 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中實現增刪改查的功能,如:
admin.site.register(models.UserInfo)
....
但是,這種方式比較簡單,如果想要進行更多的定制操作,需要利用ModelAdmin進行操作,如:
class UserAdmin(admin.ModelAdmin):#在后臺用戶展示頁面顯示更多的內容,如:phone,avatarlist_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)
?
轉載于:https://www.cnblogs.com/dingyutao/p/9200876.html
總結
以上是生活随笔為你收集整理的Django模板系统和admin模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 黄山风景区看晚霞的时间和地点
- 下一篇: 玉溪多少钱一条啊?