要遵照標識符規則語法: {{ var }}css
在模板中使用點語法,按順序查詢:字典查詢;屬性或者方法查詢;數字索引查詢html
若是使用的變量不存在,則插入空字符串python
在模板中調用對象的方法,可是不能給函數傳參django
示例json
<body> <h1>sunck is a good man</h1> <h1>he is {{ age }} years old</h1> <h1>{{ stu.name }}--{{ stu.age }}--{{ stu.grade }}</h1> <h1>*{{ name }}*</h1> <h1>{{ stu.say }}</h1> </body>
語法:{% tag %}做用: 在輸出中建立文本;控制邏輯或循環;加載外部信息到模板中使用segmentfault
ifcookie
{% if 表達式 %} 語句 {% endif %} {% if 表達式 %} 語句1 {% else %} 語句2 {% endif %} {% if 表達式1 %} 語句1 {% elif 表達式2 %} 語句2 {% elif 表達式3 %} 語句3 …… {% else %} 語句e <body> <h1>sunck is a handsome man!</h1> {% if age > 18 %} <h1>sunck is a nice man</h1> {% else %} <h1>sunck is a good man</h1> {% endif %} </body> {% endif %}
for函數
{% for 變量 in 集合 %} 語句 {% endfor %} {% for 變量 in 集合 %} 語句1 {% empty %} 語句2 # 當沒有該集合或者集合爲空的時候執行empty標籤下的語句2 <ul> {% for stu in stus %} <li>{{ stu.name }}--{{ stu.age }}</li> {% empty %} <li>沒有學生</li> {% endfor %} </ul> {% endfor %}
commentpost
做用 : 註釋 單行註釋({#<h1>sunck is a handsome man!</h1>#}) 多行註釋
{% comment %} 註釋內容 {% endcomment%} # 能夠註釋HTML代碼和邏輯控制代碼
ifequal/ifnotequal網站
做用: 判斷是否相等/不相等
# 若是值1等於值2,則執行語句 {% ifequal 值1 值2 %} 語句 {% endequal %} # 若是值1不等於值2,則執行語句 {% ifnotequal 值1 值2 %} 語句 {% endequal %}
include
做用: 加載模板
格式: {% include '模板目錄' %}
示例: {% include 't1.html' %}
url
做用:用於反向解析
格式: {% url 'namespace:name' 參數1 參數2 …… %}
csrf_token
做用:用於跨站請求僞造保護
格式:{% csrf_token %}
block、extends
做用:用於繼承
autoescape
做用:用於HTML轉義
做用: 在變量被顯示以前修改它的顯示
語法: {{ 變量|過濾器 }}
簡單過濾器: lower upper
<h1>{{ des }}</h1> <h1>{{ des|lower }}</h1> <h1>{{ des }}</h1>
過濾器可傳參,參數用引號引發來
join: <h1>{{ arr|join:'#' }}</h1>
若是一個變量沒有提供或者值爲False或者值爲空,則可使用默認值,不然使用變量的值
default: <h1>{{ name|default:'sunck' }}</h1>
根據給定格式對一個date變量格式化顯示
date : <h1>{{ value|date:'Y-m-d' }}</h1>
加減乘除
<h1>{{ age|add:2 }}</h1> <h1>{{ age|add:-2 }}</h1> {# widthratio 參數1 參數2 參數3 #} {# 參數1/參數2*參數3 #} <h1>{% widthratio age 1 2 %}</h1> <h1>{% widthratio age 2 1 %}</h1>
轉義: escape;safe
自定義過濾器
過濾器就是python的函數,能夠註冊函數後在模板中當過濾器調用
# 在應用目錄下建立名爲templatetags的包 # 在templatetags目錄下建立名爲filters.py的文件 # -*- coding:utf-8 -*- #導入Library庫 from django.template import Library #建立一個Library對象 register = Library() #定義函數 #使用裝飾器註冊成過濾器 @register.filter def even(value): return value % 2 == 0 @register.filter def sub(value, othre): return value - othre
# 使用自定義過濾器 {% load filters %} {{ 19|sub:9 }} {% if 19|even %} <h1>********************1</h1> {% else %} <h1>********************2</h1> {% endif %}
主路由:url(r'^', include("myApp.urls", namespace="myApp")),
子路由:url(r'^market2/$', views.market, name="market")
模板 : <a href="{% url 'myApp:market' %}">點我跳轉</a>
做用: 模板繼承能夠減小頁面內容的衝定義,實現頁面內容的重用
block標籤: 在父模板中預留區域,在子模板中填充
extends標籤: 實現繼承,寫在模板文件的第一行
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{% block title %}{% endblock title %}</title> {% block link %}{% endblock link %} {% block script %}{% endblock script %} </head> <body> <header>頭</header> <div> {% block main %} {% endblock main %} </div> <footer>尾</footer> </body> </html>
{% extends 'base.html' %} {% block title %}child1{% endblock title %} {% block main %} <h1>child1</h1> {% endblock main %}
Django默認開啓了HTML轉義
def login(request): if request.method == "GET": # infoStr = "<h1>sunck is a good man</h1>" infoStr = "<script>alert('sunck good')</script>" return render(request, "login.html", {"infoStr":infoStr})
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登錄</title> </head> <body> {% autoescape off %} {{ infoStr }} {{ infoStr|safe }} {{ infoStr|escape }} {% endautoescape %} <form action="/login/" method="post"> 帳號:<input type="text" name="username" value=""><hr/> 密碼:<input type="password" name="password" value=""><hr/> <input type="submit" value="登錄"> </form> </body> </html>
跨站請求僞造保護: 某些惡意網站上包含連接、表單按鈕或者JavaScript,它們會利用登錄過的用戶信息試圖在咱們的網站上完成某些操做,這就是跨站攻擊
防止CSRF
# 在settings.py中啓用"'django.middleware.csrf.CsrfViewMiddleware',"中間件,工程中默認開啓 # 開啓保護後不管是本身仍是別人都會被屏蔽 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登錄</title> </head> <body> <form action="http://127.0.0.1:8000/login/" method="post"> {% csrf_token %} 帳號:<input type="text" name="username" value=""><hr/> 密碼:<input type="password" name="password" value=""><hr/> <input type="submit" value="登錄"> </form> </body> </html>
{% csrf_token %}: 給表單頁面生成一個隱藏域;寫入一個名爲csrftoken的cookie;給隱藏域的value設置爲名爲csrftoken的cookie的值;
包含工程中的css、js、img、json等文件
在工程目下建立名爲static的目錄用以存儲靜態文件
配置靜態文件路徑
# settings.py STATIC_URL = '/static/' STATICFILES_DIRS=[ os.path.join(BASE_DIR, "static"), ]
{#{% load static from staticfiles %}#} {% load static %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>主頁</title> {# <link rel="stylesheet" type="text/css" href="/static/css/index.css">#} <link rel="stylesheet" type="text/css" href="{% static 'css/index.css' %}"> </head> <body> <h1>sunck is a good man</h1> </body> </html>