一、模板
在传统开发中,模板是在后端渲染,然后在浏览器中展示的。
1.1 模板中变量
{{ 后端传递的变量值}}
如果变量不存在,则会默认是空字符串。
1.2 方法不能有参数
{{str}}
{{str.upper}}
1.3 列表的索引不能为负
item = ['c','b','a']
{{item.2}}
1.4 模板中的标签
{% tag %}
-
加载外部传入的变量
-
在输出中创建文本
-
控制循环或逻辑
1.5 if
1.5.1 单分支
{% if 表达式 %}
语句
{% endif 表达式 %}
1.5.2 双分支
{% if 表达式 %}
语句
{% else %}
语句
{% endif 表达式 %}
1.5.3 多分支
{% if 表达式 %}
语句
{% elif %}
语句
{% else %}
语句
{% endif 表达式 %}
1.5.4 and or not
{% if adafsa and sdfdsf %}
语句
{% endif 表达式 %}
{% if not mylist %}
语句
{% endif 表达式 %}
{% if adafsa or sdfdsf %}
语句
{% endif 表达式 %}
1.5.5 in 和 not in
{% if 'a' in 'abcde' %}
语句
{% endif 表达式 %}
1.6 for
1.6.1 循环
{% for 变量 in 列表 %}
语句
{% empty %}
语句
{% endfor %}
当列表为空或不存在时,执行empty之后的语句。
1.6.2 获取索引
{{ forloop.count }} # 当前是第几次循环,从1开始
{% for item in mylist %}
{{forloop.counter}}:{{item}}
{% endfor %}
{{forloop.counter0}} 当前是第几次循环,从0开始
{{ forloop.revcounter}} 当前是第几次循环,倒数,到1停止
{{ forloop.revcounter0}} 当前是第几次循环,倒数,到0停止
{{forloop.first}} 是否是第一个,返回真假
{{forloop.last}} 是否是最后一个,返回真假
1.7 注释
1.7.1 单行注释
{# 注释内容 #}
1.7.2 多行注释
{% comment %}
内容
{% endcomment %}
1.8 过滤器
{{ var | 过滤器 }}
{{value | add:2}} # 显示前给值+2
{{ name | lower}} # 字母转小写
{{ name | upper}} # 字母转大写
{{dataval | date:'y-m-d'}} # 日期格式转换
1.9 HTML转义
把接收到的数据当做普通字符串处理,还是当做HTML渲染,这是一个问题。
1.9.1 渲染成HTML
{{ htmlstr | safe }}
1.9.2 关闭自动转义
{% autoescape off %}
htmlstr
{% endautoescape off %}
1.10 模板继承
1.10.1 block
{% block XXX%}
CODE
{% endblock%}
1.10.2 extends
继承,写在开头的位置
{% extends '父模板路径' %}
1.10.3 include
加载模块进行渲染
{% include '模板文件' %}
1.10.4 获取父模板block中的内容
{{ block.super }}
二、变量
def index(request):
data = {
'name':'python',
'age':10,
'likes':['抽烟','喝酒','烫头'],
'address':{
'city':'北京',
'area':'东城区'
}
}
return render(request,'index.html',data)
<html>
<body>
<p>name:{{name}}</p>
<p>age:{{age}}</p>
<p>likes:{{likes}}</p>
<p>likes.1:{{likes.1}}</p>
<p>address:{{address}}</p>
<p>address.city:{{address.city}}</p>
</body>
</html>
三、标签
<html>
<body>
{% if age >= 20 %}
<h2>你是大人了</h2>
{% endif %}
</body>
</html>
四、for
<html>
<body>
{% for like in likes %}
<h2>{{like}}</h2>
{% endfor %}
</body>
</html>
五、模板继承
5.1 父模板
<html>
<head>
{% block extcss %}
引入css
{% endblock %}
</head>
<body>
{% block header %}
头部
{% endblock %}
{% block content %}
内容区
{% endblock %}
{% block extjs %}
引入js
{% endblock %}
</body>
</html>
上面的父模板,在加载的时候,是不会显示的
5.2 子模板
{# 继承父模板 #}
{% extends 'block.html' %}
{% block header %}
这里写的内容,最终会渲染到父模板的header为止
{% endblock %}
渲染子模板的时候,就会显示父模板的信息。
六、使用Jinja2
6.1 安装jinja2
pip install jinja2
6.2 配置
在settings.py所在目录中创建jinja2.env.py文件,并写入如下内容
from django.templatetags.static import static
from django.urls import reverse
from jinja2 import Environment
def environment(**options):
env = Environment(**options)
env.globals.update({'static': static,'url' : reverse,
return env
6.3 在settings.py文件中配置jinja2模板引擎
# 使用Jinja2模板引警
{
'BACKEND':'django.template.backends .jinja2.Jinja2
'DIRS': [],
'APP_DIRS': True,
OPTIONS': {
#这里要添加environment,并指定到jinja2_env文件中的
'environment' environment':'demo2.jinja2_env.environment',
'context_processors': [
'django.template.context_processors.debug
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib,messages.context_processors.messages'
]
}
}
原文始发于微信公众号(Python之家):Django-3-模板
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/198200.html