Django模板母版
# 1.csrf
- 跨站请求伪造 Cross-site request forgery
# 2.csrf_token
这个标签用于跨站请求伪造保护。
#在页面的form表单里面写上 {% csrf_token %}
1
2
# 3.母版和继承
模板就是一个普通的html页面
提取到多个页面的公共部分
定义block块
{% block title %} {% endblock %}
1
2
3继承:
1. {% extends ‘base.html’ %} 2. 重写block块 —— 写子页面独特的内容 {% block title %} active {% endblock %}
1
2
3
4
5
#注意要点
1. 在继承时,{% extends 'base.html' %} 写在第一行,前面不要有内容,有内容会显示
2. {% extends 'base.html' %} 'base.html' 加上引号 不然当做变量去查找
3. 把要显示的内容写在block块中
4. 定义多个block块,定义 css js 块
1
2
3
4
2
3
4
# 4.组件
组件就是一小段HTML代码段
自定义nav.html
在html文件中写入 {% include ‘nav.html ’ %}即可引入自定义组件
- inculde 包含
# 5.静态文件
{% load static %}
<link rel="stylesheet" href="{% static '/plugins/bootstrap-3.3.7/css/bootstrap.c ss' %}">
<link rel="stylesheet" href="{% static '/css/dsb.css' %}">
{% static '/plugins/bootstrap-3.3.7/css/bootstrap.css' %}
{% get_static_prefix %} ——》 获取别名
1
2
3
4
5
6
7
2
3
4
5
6
7
# 6.自定义标签
filter 自定义过滤器
创建
在app下创建一个名为templatetags的python包(名称不能变)
在templatetags 创建py文件 自定义名称 my_tags.py(名称自定义)
在py文件中写入:
from django import template register = template.Library() # register也不能变
1
2
3写函数+装饰器
@register.filter def add_xx(value, arg): # 最多有两个 return '{}-{}'.format(value, arg)
1
2
3
4
# 使用
使用
{% load my_tags %} {{ 'alex'|add_xx:'dsb' }}
1
2
simple_tag 标签(返回内容自定义)
和自定义filter类似,只不过接收更灵活的参数。
定义注册simple tag
@register.simple_tag(name="plus") def plus(a, b, c): return "{} + {} + {}".format(a, b, c)
1
2
3使用自定义simple tag
{% load app01_demo %} # simple tag {% plus "1" "2" "abc" %}
1
2
3
4
inclusion_tag 标签(函数内返回内容必须是一个字典,第三个文件去渲染,然后代码段返回给html文件)
示例:
- templatetags/my_inclusion.py (定义标签函数)
from django import template register = template.Library() @register.inclusion_tag('result.html') #结果返回给result.html渲染 def show_results(n): n = 1 if n < 1 else int(n) data = ["第{}项".format(i) for i in range(1, n+1)] return {"data": data}
1
2
3
4
5
6
7
8
9
10- templates/result.html (以键取值,循环)
<ul> {% for choice in data %} <li>{{ choice }}</li> {% endfor %} </ul>
1
2
3
4
5- templates/index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>inclusion_tag test</title> </head> <body> {% load my_inclusion %} {% show_results 10 %} #调用自定义函数名,得到渲染后的结果 </body> </html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15- 处理流程图解
![1560929029828](C:\Users\big cattle\AppData\Roaming\Typora\typora-user-images\1560929029828.png)
上次更新: 2023/04/16, 18:35:33