文章目录
-
-
- 视图传递给模板的数据 遵循标识符命名规则 语法:{{var}} 注意 如果使用的变量不存在,则插入的是空字符串 在模板中使用点(.)语法{{stu.name}} 字典查询 属性或者方法 数字索引 在模板中调用对象的方法 注意:不能传递参数
- 语法:{% tag %} 作用 在输出中创建文本 控制逻辑或循环 if 语法 # way1 {% if 表达式 %} 语句 {% endif %} # way2 {% if 表达式 %} 语句1 {% else %} 语句2 {% endif %} #way3 {% if 表达式1 %} 语句1 {% elif 表达式2 %} 语句2 ... {% elif 表达式n %} 语句n {% else %} 语句e {% endif%} for # way1 {% for var in 列表 %} 语句 {% endfor %} # way2 {% for var in 列表 %} 语句 {% empty %} 语句2(列表为空或者列表不存在时执行语句2) {% endfor %} # 特殊var,表示第几次循环 {{forloop.counter}} comment 注释多行 {% comment %} 注释内容 {% endcomment %} ifequal/ifnotequal 判断是否相等或不相等 {% ifequal 值1 值2 %} 语句(如果值1等于值2则执行这个语句) {% endifequal %} include 加载模板并以标签内的参数渲染 {% include '模板目录' 参数1 参数2 %} url 反向解析 {% url 'namespace:name' p1 p2%} csrf_token 用于跨站请求伪造保护 {% csrf_token %} block/extends 用于模板继承 autoescape 用于HTML转义
- 语法 {{ var|过滤器}} 作用 在变量显示前修改它 - lower - upper - 过滤器可以传递参数,参数用引号引起来 - join - 格式:列表|join:"#" - 例子:<p>{{list|join:"#"}}</p> - 如果一个变量没有被引用,或者值为False/空,可以使用默认值defalut - 格式:{{test|default:"没有"}} - 示例:<p>{{test|default:"没有"}}</p> - 根据指定格式转换日期为字符串 - 格式:{{ dateVal |date:"y-m-d"}} - HTML转义escape - 加减乘除 <h1>加减乘除</h1> <h1>{{ num }}</h1> <h1>{{ num|add:10 }}</h1> <h1>{{ num|add:-5 }}</h1> <!-- (num/1)*5 --> <h1>{% widthratio num 1 5 %}</h1> <!-- num/5 --> <h1>{% widthratio num 5 1 %}</h1>
- 单行注释 {# 注释的内容 #} 多行注释 [[Django#^6b98ce]]] {% comment %} 注释内容 {% endcomment %}
- 项目url配置 urlpatterns = [ path('admin/', admin.site.urls), url(r'^', include(('myApp.urls',"myApp"),namespace='app')), ] application配置 urlpatterns = [ url(r'^good/(\d+)$',views.good,name='good'), ] html配置 <a href="{% url 'app:good' 2 %}">自动解析的方式-Good</a>
-
- 可以减少页面内容的重复定义,实现页面的重用
- 在父模板中预留区域,子模版去填充 语法,content为自定义的名称 {% block content %} {% endblock %}
- 继承模板,需要写在模板文件的第一行 语法 {% extends '父模板路径' %}
- 定义父模板 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> #header{ width: 100%; height: 100px; background-color: #red; padding: 2em; text-align: center; } #footer{ width: 100%; height: 100px; background-color: blue; padding: 2em; text-align: center; } #content{ width: 100%; height: 500px; background-color: yellow; padding: 2em; text-align: center; } </style> </head> <body> <div id="header">header</div> <div id="content"> {% block content %} {% endblock %} <hr> {% block content2 %} {% endblock %} </div> <div id="footer">footer</div> </body> </html> 定义子模版 {% extends 'myApp/base.html' %} {% block content %} <h1>detail!</h1> {% endblock %} {% block content2 %} <h1>detail2!</h1> {% endblock %}
- 验证码生成代码
-
- 视图传递给模板的数据
- 遵循标识符命名规则
- 语法:
{{var}}
- 注意
- 如果使用的变量不存在,则插入的是空字符串
- 在模板中使用点(.)语法
{{stu.name}}
- 字典查询
- 属性或者方法
- 数字索引
- 在模板中调用对象的方法
- 注意:不能传递参数
{{var}}- 如果使用的变量不存在,则插入的是空字符串
{{stu.name}}
- 字典查询
- 属性或者方法
- 数字索引
- 注意:不能传递参数
- 语法:
{% tag %}
- 作用
- 在输出中创建文本
- 控制逻辑或循环
if
- 语法
# way1
{% if 表达式 %}
语句
{% endif %}
# way2
{% if 表达式 %}
语句1
{% else %}
语句2
{% endif %}
#way3
{% if 表达式1 %}
语句1
{% elif 表达式2 %}
语句2
...
{% elif 表达式n %}
语句n
{% else %}
语句e
{% endif%}
for
# way1
{% for var in 列表 %}
语句
{% endfor %}
# way2
{% for var in 列表 %}
语句
{% empty %}
语句2(列表为空或者列表不存在时执行语句2)
{% endfor %}
# 特殊var,表示第几次循环
{{forloop.counter}}
comment 注释多行
{% comment %}
注释内容
{% endcomment %}
ifequal/ifnotequal 判断是否相等或不相等
{% ifequal 值1 值2 %}
语句(如果值1等于值2则执行这个语句)
{% endifequal %}
include 加载模板并以标签内的参数渲染
{% include '模板目录' 参数1 参数2 %}
url 反向解析
{% url 'namespace:name' p1 p2%}
csrf_token 用于跨站请求伪造保护
{% csrf_token %}
block/extends 用于模板继承
-
autoescape 用于HTML转义
{% tag %}- 在输出中创建文本
- 控制逻辑或循环
if
- 语法
# way1
{% if 表达式 %}
语句
{% endif %}
# way2
{% if 表达式 %}
语句1
{% else %}
语句2
{% endif %}
#way3
{% if 表达式1 %}
语句1
{% elif 表达式2 %}
语句2
...
{% elif 表达式n %}
语句n
{% else %}
语句e
{% endif%}
for# way1
{% for var in 列表 %}
语句
{% endfor %}
# way2
{% for var in 列表 %}
语句
{% empty %}
语句2(列表为空或者列表不存在时执行语句2)
{% endfor %}
# 特殊var,表示第几次循环
{{forloop.counter}}
comment 注释多行{% comment %}
注释内容
{% endcomment %}
ifequal/ifnotequal 判断是否相等或不相等{% ifequal 值1 值2 %}
语句(如果值1等于值2则执行这个语句)
{% endifequal %}
include 加载模板并以标签内的参数渲染{% include '模板目录' 参数1 参数2 %}
url 反向解析{% url 'namespace:name' p1 p2%}
csrf_token 用于跨站请求伪造保护{% csrf_token %}
block/extends 用于模板继承
autoescape 用于HTML转义
- 语法
{{ var|过滤器}}
- 作用
{{ var|过滤器}}
在变量显示前修改它
- lower
- upper
- 过滤器可以传递参数,参数用引号引起来
- join
- 格式:列表|join:"#"
- 例子:<p>{{list|join:"#"}}</p>
- 如果一个变量没有被引用,或者值为False/空,可以使用默认值defalut
- 格式:{{test|default:"没有"}}
- 示例:<p>{{test|default:"没有"}}</p>
- 根据指定格式转换日期为字符串
- 格式:{{ dateVal |date:"y-m-d"}}
- HTML转义escape
- 加减乘除
<h1>加减乘除</h1>
<h1>{{ num }}</h1>
<h1>{{ num|add:10 }}</h1>
<h1>{{ num|add:-5 }}</h1>
<!-- (num/1)*5 -->
<h1>{% widthratio num 1 5 %}</h1>
<!-- num/5 -->
<h1>{% widthratio num 5 1 %}</h1>
- 单行注释
{# 注释的内容 #}
- 多行注释 [[Django#^6b98ce]]]
{% comment %}
注释内容
{% endcomment %}
{# 注释的内容 #}
{% comment %}
注释内容
{% endcomment %}
- 项目url配置
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^', include(('myApp.urls',"myApp"),namespace='app')),
]
- application配置
urlpatterns = [
url(r'^good/(\d+)$',views.good,name='good'),
]
- html配置
<a href="{% url 'app:good' 2 %}">自动解析的方式-Good</a>
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^', include(('myApp.urls',"myApp"),namespace='app')),
]
urlpatterns = [
url(r'^good/(\d+)$',views.good,name='good'),
]
<a href="{% url 'app:good' 2 %}">自动解析的方式-Good</a>
- 可以减少页面内容的重复定义,实现页面的重用
- 在父模板中预留区域,子模版去填充
- 语法,content为自定义的名称
{% block content %}
{% endblock %}
{% block content %}
{% endblock %}
- 继承模板,需要写在模板文件的第一行
- 语法
{% extends '父模板路径' %}
{% extends '父模板路径' %}
- 定义父模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style> #header{
width: 100%;
height: 100px;
background-color: #red;
padding: 2em;
text-align: center;
}
#footer{
width: 100%;
height: 100px;
background-color: blue;
padding: 2em;
text-align: center;
}
#content{
width: 100%;
height: 500px;
background-color: yellow;
padding: 2em;
text-align: center;
}
</style>
</head>
<body>
<div id="header">header</div>
<div id="content">
{% block content %}
{% endblock %}
<hr>
{% block content2 %}
{% endblock %}
</div>
<div id="footer">footer</div>
</body>
</html>
- 定义子模版
{% extends 'myApp/base.html' %}
{% block content %}
<h1>detail!</h1>
{% endblock %}
{% block content2 %}
<h1>detail2!</h1>
{% endblock %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style> #header{
width: 100%;
height: 100px;
background-color: #red;
padding: 2em;
text-align: center;
}
#footer{
width: 100%;
height: 100px;
background-color: blue;
padding: 2em;
text-align: center;
}
#content{
width: 100%;
height: 500px;
background-color: yellow;
padding: 2em;
text-align: center;
}
</style>
</head>
<body>
<div id="header">header</div>
<div id="content">
{% block content %}
{% endblock %}
<hr>
{% block content2 %}
{% endblock %}
</div>
<div id="footer">footer</div>
</body>
</html>
{% extends 'myApp/base.html' %}
{% block content %}
<h1>detail!</h1>
{% endblock %}
{% block content2 %}
<h1>detail2!</h1>
{% endblock %}
- 直接在view把html传到模板中会被当作字符串渲染
- 将接收到的字符串当作html代码渲染
- 过滤器
safe
- 标签
autoescape 并启用off
{{code}}
<hr>
{{code|safe}}
<hr>
{% autoescape off %}
{{code}}
{% endautoescape %}
safeautoescape 并启用off{{code}}
<hr>
{{code|safe}}
<hr>
{% autoescape off %}
{{code}}
{% endautoescape %}
- 某些恶意网站包含链接、表单、按钮利用登录用户在浏览器中进认证,并进行攻击。
- 在
seetings.py中的MIDDLEWARE添加'django.middleware.csrf.CsrfViewMiddleware',
- 在网页中加上
{% csrf_token %}
seetings.py中的MIDDLEWARE添加'django.middleware.csrf.CsrfViewMiddleware',{% csrf_token %}
