1.模板系統
1.語法
1.變量相關
{{ name}} ,{{ name|length}}, {{ name |default:"默認值"}}
2.邏輯相關
1.if判斷
{% if a > b %} //{% if a in b%}
{% endif %}css
{% if a > b %}
{% else %}
{% endif %}html
{% if a > b %}
{% elif %}
{% else %}
{% endif %}
2.for循環
{% for i in name-list %}
{{ i }}
{% empty %}
<p>若是爲空的話這裏能夠填寫一些提示內容</p>
{% endfor %}python
forloop.counter
forloop.counter0
forloop.revcounter
forloop.revcounter0django
forloop.first
forloop.lastbootstrap
forloop.parentloop -->兩層循環
2.filter
1.經常使用的filter
1. length
2. filesizeformat -->格式化文件大小的
3. date:'Y-m-d H:i:s' -->格式化時間
4. silce 切片
5. safe -->XSS攻擊 經過評論的方式寫一段JS代碼
6. truncatechars:20 -->截取字符長度 一邊用來摘要
7. default -->默認
2. 自定義的filter
步驟
定義階段
1. 在app下新建一個python的包:templatetags包
2. 在上面的python包中新建一個python文件 名字隨意
3. 在上述的python文件中
form django import template
#生成一個註冊用的示例
register = template.Libray() #注意是大寫的
#定義一個自定義的filter
@register.filter(name='new_filter')
def add_str(arg): (最多有兩個參數) #第一個參數是通道符前面的 ,能夠有第二個參數
return ...
調用階段
1. 在Django模板文件中,導入剛纔新建的python文件
{% load py文件名 %}
2. 按照filter的語法調用
{{ name|new_filter}} #沒有第二個參數傳入
{{ name|new_filter:arg2 }} #傳入第二個參數
3.母版與組件
1.何時用母版
html頁面有重複的代碼的,把他們提取出來放到一個單獨的html文件
2.子頁面如何使用母版
{% extends 'base.html' %} -->必須放在第一行
{% block 塊名 %} {% endblock %} -->子頁面使用block去替換母版中同名的塊
3.組件
1.何時使用組件
重複代碼 包裝成一個小的html文件
2.如何使用
{% include '組件.html' %}
3.Django模塊語言中關於靜態文件的靈活寫法
1.利用static方法幫我憑藉靜態文件的路徑
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
{% load static %}
<link href="{% static 'bootstarp/css/bootstrap.min.css' %}" rel="stylesheet">
4.自定義的simple_tag
比filter傳入的參數多
5.有自定義的inclusion_tag
用來返回一段html代碼
1.在定義階段
在app中下面新建templatetags文件夾
新建一個xx.py文件
from django import template
#生成註冊示例 ,名字必須是register
register = template.Library()
@register.inlcusion_tag('ul.html')
def show_ul(num):
num = 1 if num < 1 else int(num)
data = {"第{:0>3}號技師".format(i) for i in range(1,num+1)}
return {'data':data}
2.調用階段
{% load xx文件名 %}
{% show_ul 10 %}
4.視圖
1.CBV和FBV
CBV基於類的視圖
FBV基於方法的視圖
2.request對象
1.相關方法
1.request.method -->獲取請求的方法(GET或者POST等)
2.request.GET -->一般用來獲取URL裏面的參數
3.request.POST -->一般用來獲取POST提交過來的數據
4.request.path_info -->獲取用戶請求的路徑
5.request.body -->獲取用戶POST的內容字節形式
5.文件上傳
注意form表單裏面須要有 enctype="multipart/form-data"
在保存上傳文件錢,數據須要存放到某個位置,默認擔當上傳文件小於2.5M的時候,django會將上傳文件的所有內容直接上傳
當上傳文件很大的時候,django會把上傳文件寫到臨時文件中,而後存放到系統的臨時文件裏
在後臺處理的時候調用
<input type='file' name='filename'>app
request.FILES['filename'] -->獲取文件對象
request.FILES['filename'].name -->獲取文件對象名
request.FILES['filename'].chunks() -->從文件對象中一點一點的讀取 須要寫個循環讀取
4.路由系統
1.分組匹配 -->給視圖函數傳一個位置參數
path('delete_p_list/[0-9]{2}/$',views.delete_p_list),
<a href="/delete_p_list/{{ publisher.id }}">刪除</a></button>
2.分組命名匹配 -->給視圖函數傳一個關鍵字參數
3.反向解析URL
本質上就是給url匹配模式起別名 而後再用別名拿到具體的URL路徑
re_path('publisher_list/[0-9]{2}/$',views.Publisher.as_view(),name='pulisher_list'),
<a href="{% url 'pulisher_list' %}" class="active">
1.如何使用
在模板語言中
{% url '別名' %}
在視圖中
from django import reverse
reverse('別名') -->獲得一個具體的URL路徑函數