2019独角兽企业重金招聘Python工程师标准>>>
template模版简介
==【具体示例参照博文最后的综合示例】==
模版语法
模版组成
HTML + 逻辑控制代码(如:python、PHP等)
逻辑控制代码组成
{{变量名称}}
创建模版
Template("内容")
模版变量
{'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)
语法
{{变量|filter:函数}}
默认函数
函数 | 释义 |
---|---|
add | 给变量添加相应的值 |
addslashes | 给变量中的引号加转义符 |
capfirst | 首字母大写 |
cut | 从字符串中移除指定字符 |
date | 格式化日期字符串 |
default | 如果值是False,替换成设置的值,否则为原值 |
default_if_none | 如果值是None,替换成设置的值,否则为原值 |
自定义函数
创建自定义函数条件
- 在app中创建templatetags模块[必须使用此名称]
- 创建任意.py文件
需要固定格式
from django import template
from django.utils.safestring import mark_saferegister = template.Library()
#register对象名称是固定的,不可改变#自定义过滤器【传参只能传一个】
@register.filter
def 自定义函数(参数):代码块return 返回值#自定义标签【不能用在控制语句】
@register.simple_tag
def 自定义函数(参数):代码块return 返回值
自定义过滤器使用
{{函数|自定义标签名}}
自定义标签使用
{% simple_tag_multi 值1 值2 %}
控制语句
if语句
语法
{%if 条件%}代码块
{%elif%}代码块
{%else%}代码块
{%endif%}
for循环语句
语法
{% for %}代码块
{% endfor %}
特殊变量 | 释义 |
---|---|
{{forloop.counter1}} | 循环计数,后跟数字为计数起始值 |
{{forloop.revcounter}} | 反向循环 |
{{forloop.revcounter2}} | 反向循环计数,后跟数字为计数起始值 |
{{forloop.first}} | 返回布尔值,第一次循环时值为True,其它循环为Flase |
{{forloop.last}} | 返回布尔值,最后一次循环时值为True,其它循环为Flase |
csrf_token 验证
- Django视图中间件的一种安全机制
- 开启方式: setting --- MIDDLEWARE 的参数中【默认开启】
- 如果开启并且 模版中无 csrf_token 设置则返回403
setting开启设置,关闭注释即可,默认开启状态
'django.middleware.csrf.CsrfViewMiddleware',
模版设置
{% csrf_token %}
with 变量代替名
范围仅限于 with 和 endwith 之间
用法
{% with 新变量名=原变量名%}新变量名代码块
{% endwith %}
verbatim 禁止render
范围仅限于 verbatim 和 endverbatim 之间
{% verbatim %}代码块,全部以字符串形式出现
{% endverbatim %}
模版引入和模版继承
详见下文综合示例
综合示例
架构
MydjangoAPPmigrationstemplatesbackup.htmlindex.htmltest.htmltemplatetagsMyTag.pyadmin.pyapps.pymodels.pyviews.pyMydjangosettingsurls.pywsgi.py
全局配置
urls.py
from django.contrib import admin
from django.urls import path,re_path
from APP import viewsurlpatterns = [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')],
APP应用配置
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 = "click"S = "hello,'Django'"T = datetime.datetime.now()M = ''N = NoneL = ["一","二","三"]D = {"name":"小明","age":20}C = C_test("小红")return render(request,"index.html",locals())
def Back(request):return render(request,"backup.html")
index.html
{% block Alter%}
{% if D.age > 20 %}
{% elif D.age is 20 %}
{% else %}
{%endif%}
{% for i in L %}
{% endfor %}
{% endblock%}
test.html
backup.html
{% extends "index.html" %}
{% load staticfiles %}
{% block Alter%}
{{ block.super}}
{% include "test.html"%}
{% endblock%}
访问 http://127.0.0.1:8000 效果展示测试
---------------------------------- 句点符 ----------------------------------------
['一', '二', '三']
一
{'name': '小明', 'age': 20}
小明
小红
---------------------------------- 过滤器 ----------------------------------------
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循环语句 ----------------------------------------
---------------------------------- 模版继承 ----------------------------------------
【模版范围是模版代码开始和结束之间的内容】
【模版内容包含的变量代码不能继承,只能继承静态代码】