@作用和目錄位置
- template一般用於存放html文件
- template可以是自定義命名的
在子應用目錄下是需要註冊的
但在工程目錄下需要在stting.py
裏註冊:
ps:還需要make爲template Folter
# django默認的模板配置
TEMPLATES = [
{
...,
# 模板路徑
'DIRS': [
os.path.join(BASE_DIR, 'templates'),
],
使用template下的html文件時需要在views.py裏對應的方法使用
def where(request):
students =Students.objects.all()
datadict={
'stu':students
}
return render(request,'where.html',context=datadict)
@模板語法
- 讀取數據
#根據關聯查找
def func(request,num):
#獲取對應的班級對象
grade = Grade.object.get(pk = num)
#獲取班級下所有學生的對象列表
stulist = grade.student_set.all()
#xxx是傳過來字典的鍵名
{{ xxx.attr}}//通過鍵名調用相關屬性
{{ ddd.i}}//ddd傳過來的是容器或者集合,通過下標i調用
{{ xxx.method }}//通過鍵名調用相應方法
{{ xxx }}//xxx可以是變量,也可以是對象屬性
{{ xxx.key }}//傳過來的字典裏又有字典
{% %}//實行代碼或代碼段
@模板內的註釋
1 <!--普通HTML註釋是可見的-->
2 {# 模板註釋是不可見的 #}
3 {% comment %}...{% endcomment %}(也是不可見得)
@模板內的計算
- 加法和減法
#加法:value是傳過來的值
{{ value|add:10 }}//加10
#減法
{{ value|add:-10 }}//減10
乘除法
#相當於a/b*c,如果要進行2元運算則把第三個設成1 就行了
{% widthratio a b c %}
@大寫轉換
#大寫轉小寫
{{ animal.a_name|lower }}
#小寫轉大寫
{{ animal.a_name|upper }}
@流程控制(遍歷和判斷)
- 遍歷
#獲取下標
{{ forloop.counter }}//返回的集合下標從1開始
{{ forloop.counter0 }}//返回的集合下標從0開始
{{ forloop.revcounter }}//索引從最大長度到1
{{ forloop.revcounter0 }} //索引從最大長度到0
- if 條件
#下面2個,在for循環中使用
{% if forloop.first %},{% if forloop.last %}
例如:
{% if forloop.first %}
...
{% elif forloop.last %}
...
{% else %}
...
{% endif %}
#判斷是否相等
1 {% ifequal value1 value2 %}...{% else %}...{% endifequal %}
2 {% ifnotequal value1 value2 %}...{% else %}...{% endifnotequal %}
@轉義開關
作用:就是views.py傳過來的字典值是一串html代碼,一般正常是按字符串輸出的,如果轉義後就會編譯成html格式在頁面輸出
- safe方法轉義
{ contents|safe }//添加safe完成轉義
- 包裹起來轉義
#off是關閉轉義,on是開啓
{% autoescape off %}
{{ content }}
{% endautoescape %}
@父輩挖坑子孫填
就是子類繼承父類後可以在父類的模塊內重寫和修改
- 兼併
{% extends 'base_main.html' %}//繼承另一個模塊
{% include xxx.html %}//兼併另一個模板使之成爲頁面的一部分
{% load static %}//不可省略
#使用block把html代碼分割,extCSS是自定義命名
{% block extCSS %}
{{ block.super }}//繼承父類block的內容
...
{% endblock %}
@模板渲染過程
使用HttpResponse完成render的功能
- 1加載模板
template = loader.get_template('Hello.html')//返回<class 'django.template.backends.django.Template'>
- 2渲染模板
result = template.render()//返回<class 'django.utils.safestring.SafeText'>
renturn HttpResponse(result)// 完成
result = template.render(context={"haha":"你哈什麼哈"})//渲染時給模板傳遞數據