==【具体示例参照博文最后的综合示例】==html
模版组成前端
HTML + 逻辑控制代码(如:python、PHP等)
逻辑控制代码组成python
{{变量名称}}
建立模版shell
Template("内容")
模版变量django
{'name':'text'}
Django环境后端
python manange.py shell
template模版 和 context上下文对象浏览器
>>>from django.template import Context,Template >>>t = Template("Hello,{{ name }}") >>>c = Context({'name':'Django'}) >>>t.render(c) 'Hello,Django'
句点符是一种 Django 深度查找变量比较快捷的一种方式,可用于字符串、字典、列表、类等多种类型的使用安全
{{变量|filter:函数}}
函数 | 释义 |
---|---|
add | 给变量添加相应的值 |
addslashes | 给变量中的引号加转义符 |
capfirst | 首字母大写 |
cut | 从字符串中移除指定字符 |
date | 格式化日期字符串 |
default | 若是值是False,替换成设置的值,不然为原值 |
default_if_none | 若是值是None,替换成设置的值,不然为原值 |
建立自定义函数条件架构
- 在app中建立templatetags模块[必须使用此名称]
- 建立任意.py文件
须要固定格式app
from django import template from django.utils.safestring import mark_safe register = template.Library() #register对象名称是固定的,不可改变 #自定义过滤器【传参只能传一个】 @register.filter def 自定义函数(参数): 代码块 return 返回值 #自定义标签【不能用在控制语句】 @register.simple_tag def 自定义函数(参数): 代码块 return 返回值
自定义过滤器使用
{{函数|自定义标签名}}
自定义标签使用
{% simple_tag_multi 值1 值2 %}
语法
{%if 条件%} 代码块 {%elif%} 代码块 {%else%} 代码块 {%endif%}
语法
{% for %} 代码块 {% endfor %}
特殊变量 | 释义 |
---|---|
{{forloop.counter1}} | 循环计数,后跟数字为计数起始值 |
{{forloop.revcounter}} | 反向循环 |
{{forloop.revcounter2}} | 反向循环计数,后跟数字为计数起始值 |
{{forloop.first}} | 返回布尔值,第一次循环时值为True,其它循环为Flase |
{{forloop.last}} | 返回布尔值,最后一次循环时值为True,其它循环为Flase |
- Django视图中间件的一种安全机制
- 开启方式: setting --- MIDDLEWARE 的参数中【默认开启】
- 若是开启而且 模版中无 csrf_token 设置则返回403
setting开启设置,关闭注释便可,默认开启状态
'django.middleware.csrf.CsrfViewMiddleware',
模版设置
{% csrf_token %}
范围仅限于 with 和 endwith 之间
用法
{% with 新变量名=原变量名%} 新变量名代码块 {% endwith %}
范围仅限于 verbatim 和 endverbatim 之间
{% verbatim %} 代码块,所有以字符串形式出现 {% endverbatim %}
详见下文综合示例
架构
Mydjango APP migrations templates backup.html index.html test.html templatetags MyTag.py admin.py apps.py models.py views.py Mydjango settings urls.py wsgi.py
urls.py
from django.contrib import admin from django.urls import path,re_path from APP import views urlpatterns = [ path('admin/', admin.site.urls), re_path('^$',views.Test), path('backup',views.Back), ]
settings.py 改动
INSTALLED_APPS 中添加你创建的应用'APP',以,号结尾
TEMPLATES配置: 'DIRS': [os.path.join(BASE_DIR, 'APP/templates')],
views.py
# -*- coding:utf8 -*- from django.shortcuts import render import datetime class C_test(): def __init__(self,name): self.name=name def Test(request): A = "<a href="">click</a>" S = "hello,'Django'" T = datetime.datetime.now() M = '' N = None L = ["一","二","三"] D = {"name":"小明","age":20} C = C_test("小红") return render(request,"index.html",locals()) def Back(request): return render(request,"backup.html")
index.html
<style> *{color:green;} </style> {% block Alter%} <!--定义模版开始,模版名称为 Alter--> <body> <div>---------------------------------- 句点符 ---------------------------------------- </div> <div>{{ L }}</div> <!-- 取整个列表--> <div>{{ L.0 }}</div> <!--取列表中第一位--> <div>{{ D }}</div> <!--取整个字典--> <div>{{ D.name }}</div> <!--取字典指定键的值--> <div>{{ C }}</div> <!--类的实例对象--> <div>{{ C.name }}</div> <!--类对象中的变量--> <div>---------------------------------- 过滤器 ---------------------------------------- </div> <div>{{ D.age|add:2 }}</div> <!--取字典指定键的值,并增长值--> <div>{{ S|addslashes }}</div> <!--引号加转义符--> <div>{{ S|capfirst }}</div> <!--首字符变大写--> <div>{{ S|cut:'hello' }}</div> <!--移除指定字符--> <div>{{ T}}</div> <!--未通过处理日期--> <div>{{ T|date }}</div> <!--通过处理的日期--> <div>{{ M|default:"空值" }}</div> <!--空值处理--> <div>{{ N|default_if_none:"none值" }}</div> <!--None 值处理--> <div>---------------------------------- 筛选器 ---------------------------------------- </div> <div>{{ S|first }}</div> <!--字符串第一位--> <div>{{ S|last }}</div> <!--字符串最后一个位--> <div>{{ S|length }}</div> <!--字符串长度--> <div>{{ S|slice:":3" }}</div> <!--字符串前几位--> <div>{{ S|slice:":-5" }}</div> <!--字符串后几位去掉--> <div>---------------------------------- 特殊符 ---------------------------------------- </div> <div>{{ S|filesizeformat }}</div> <!--变量值大小--> <div>{{ A|safe }}</div> <!--浏览器后端传输前端未渲染的内容渲染处理--> <div>{{ S|urlencode }}</div> <!--编码转换--> <div>---------------------------------- 条件判断 ---------------------------------------- </div> {% if D.age > 20 %} <div>{{D.name}}的年龄大于20</div> {% elif D.age is 20 %} <div>{{D.name}}的年龄等于20</div> {% else %} <div>{{D.name}}的年龄小于20</div> {%endif%} <div>---------------------------------- for循环语句 ---------------------------------------- </div> {% for i in L %} <div>第{{forloop.counter}}次循环,循环内容{{i}}</div> {% endfor %} <div>---------------------------------- 模版继承 ---------------------------------------- </div> <ul> <li>【模版范围是模版代码开始和结束之间的内容】</li> <li>【模版内容包含的变量代码不能继承,只能继承静态代码】</li> </ul> </body> {% endblock%} <!--定义模版结束-->
test.html
<div>用于引用测试的HTML文件</div>
backup.html
{% extends "index.html" %} <!--模版继承--> {% load staticfiles %} <!--用于引用其余静态文件--> {% block Alter%} <!-- 引用模版 Alter 开始--> <style> *{background: yellow;} /*新增样式示例*/ </style> {{ block.super}} <!-- 获取父类内容--> {% include "test.html"%} <!--引入的 HTML 测试静态文件--> {% endblock%} <!-- 引用模版 Alter 结束-->
访问 http://127.0.0.1:8000 效果展现测试
---------------------------------- 句点符 ---------------------------------------- ['一', '二', '三'] 一 {'name': '小明', 'age': 20} 小明 <APP.views.C_test object at 0x000001927B2C1D30> 小红 ---------------------------------- 过滤器 ---------------------------------------- 22 hello,\'Django\' Hello,'Django' ,'Django' Aug. 29, 2018, 5:10 p.m. Aug. 29, 2018 空值 none值 ---------------------------------- 筛选器 ---------------------------------------- h ' 14 hel hello,'Dj ---------------------------------- 特殊符 ---------------------------------------- 0 bytes click hello%2C%27Django%27 ---------------------------------- 条件判断 ---------------------------------------- 小明的年龄等于20 ---------------------------------- for循环语句 ---------------------------------------- 第1次循环,循环内容一 第2次循环,循环内容二 第3次循环,循环内容三 ---------------------------------- 模版继承 ---------------------------------------- 【模版范围是模版代码开始和结束之间的内容】 【模版内容包含的变量代码不能继承,只能继承静态代码】
访问 http://127.0.0.1:8000/backup 模版继承和改动测试
---------------------------------- 句点符 ---------------------------------------- ---------------------------------- 过滤器 ---------------------------------------- 空值 ---------------------------------- 筛选器 ---------------------------------------- 0 ---------------------------------- 特殊符 ---------------------------------------- 0 bytes ---------------------------------- 条件判断 ---------------------------------------- 的年龄小于20 ---------------------------------- for循环语句 ---------------------------------------- ---------------------------------- 模版继承 ---------------------------------------- 【模版范围是模版代码开始和结束之间的内容】 【模版内容包含的变量代码不能继承,只能继承静态代码】