Django框架模版引擎详解
作为一个Web框架,Django需要一种动态生成HTML的便捷方法。最常用的方法依赖于模板。
模板包含所需的HTML输出的静态部分以及描述动态内容将被插入的某些特殊语法。
模版引擎的配置
web/web/settings.py TEMPLATES
# 默认情况下,只需要创建模版存放的目录 web/templates# 在settings.py 的配置文件中 模版引擎配置项中 定义模版目录即可TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR,'templates')],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},]
模版引擎的使用
在需要解析模版的视图函数中,使用render函数就可以加载模版文件
def index(request):# render有三个参数,第一个参数是请求对象,第二个参数是响应模版文件,第三个参数是字典,传递给模版的数据# love = 'iloveyoutosimida'return render(request,'index.html',{'lovestr':love})
模版引擎的语法
1.变量的使用
基本语法:
{{ var }}
- 当模版引擎遇到一个变量,将计算这个变量,然后将变量结果输出
- 变量名必须是由字母,数字,下划线和点组成
当模版引擎遇到点 . ,会按照以下顺序进行结果的解析
- 按照字典解析 var[‘bar’]
- 按照对象的属性或方法进行解析。var.bar
- 按照数字索引进行解析 var[2]
- 如果变量不存在,也不会报错,模版会插入空字符串 ‘ ’
- 在模版中使用变量或方法时,不能使用小括号,中括号,大括号等。
- 调用方法时,不能传递参数
2.标签的使用
循环,流程控制,等其他功能的语法
语法:
{% tag %}
for循环标签
<!-- 模版中 for循环的使用 -->{% for k,v in vardict.items %}<li>{{ k }} <==> {{ v }}</li>{% endfor %}
if流程控制标签
<!-- if 流程控制语法 --><li>{% if vardict.age > 20 %}年轻人{% else %}小青年{% endif %}</li>
Comment 注释标签
<!-- 单行注释 --><li>单行注释标签:{# {{ var }} #}</li><!-- 多行注释 --><li>{% comment %}{% if vardict.age > 20 %}年轻人{% else %}小青年{% endif %}{% endcomment %}</li>
CSRF标签
{% csrf_token %}# 一般用在表单内,会自动的生成一个隐藏的表单项<input type="hidden" name="csrfmiddlewaretoken" value="asdgyagdua723ajhsbc">
url反向解析标签
{% url 'routename' args %}
3.过滤器
语法:
# 可以对前面的变量进行计算处理在输出{{ 变量|过滤器 }}# 1. 简单的大小写转换{{ varstr | upper }} {{ varstr | lower }}# 2. join过滤器{{ arr|join:"," }}# 3.求长度{{ arr|length }}# 4.设置默认值{{ info|default:"这个人很懒,什么都没有留下" }}# 5.关闭自动转移 safe{{ varhtml|safe }}
