Django Web开发之模板
1.模板文件
模板文件包括两部分:
- 静态文件:css,js,html
- 动态内容:动态去产生一些网页内容,这需要通过模板语言来实现。
2.模板文件的使用
- 加载模板文件 ,获取模板文件的内容,产生一个模板对象。
- 定义模板上下文 ,给模板文件传递数据。
- 模板渲染产生html页面内容 render,用传递的数据替换相应的变量,产生一个替换后的标准的html内容。
2.1常用语法
- 变量相关的用{{ }}
- 逻辑相关的用
2.2模板变量
模板变量名是由数字,字母,下划线和点组成的,不能以下划线开头。
使用模板变量:{{模板变量名}},
2.3 模板变量的解析
使用模板变量时,.前面的可能是一个字典,可能是一个对象,还可能是一个列表。
例如:{{ dogs.name }}
1)把dogs当成一个字典,把name当成键名
2)把dogs当成一个对象,把name当成属性
3)把dogs当成一个对象,把name当成对象的方法
模板按照上面的顺序进行解析。
2.4 模板标签
语法: {% 代码段 %}
- for 循环
{% for x in 列表 %}
....
{% endfor %}
- if
{% if ... %}
....
{% elif ... %}
....
{% endif %}
示例
{% for i in books %}
<tr>
<td>{{ i.id}}</td>
<td>{{ i.title }}</td>
<td>{{ i.author }}</td>
</tr>
{% endfor %}
<select>
{% for i in books %}
{% if i.id == 1 %}
<option selected="selected" value="{{ i.id }}">{{ i.title }}</option>
{% else %}
<option value="{{ i.id }}">{{ i.title }}</option>
{% endif %}
{% endfor %}
</select>
2.5 filter
在Django的模板语言中,通过使用 filter 来改变变量的显示。
语法: {{ value|filter_name:参数 }}
Django常用内置过滤器
参考文档:https://docs.djangoproject.com/zh-hans/2.2/ref/templates/builtins/
- default
#如果一个变量是false或者为空,使用给定的默认值
{{ value|default:"hello"}}
- filesizeformat
# 将值格式化为一个对人友好可读文件大小 (例如 '200 KB', '10.5 MB', '1.8 GB ', 等等)
{{ value|filesizeformat }}
- date日期的格式化
{{ value|date:"Y-m-d H:i:s"}}
- slice切片
{{value|slice:"1:-1"}}
- safe
在模板上下文中的html标记默认是会被转义的,使用safe可以关闭这种转义。
{{ value|safe}}
2.6 自定义过滤器
自定义过滤器只是带有一个或两个参数的Python函数
参考文档:https://docs.djangoproject.com/zh-hans/2.2/howto/custom-template-tags/
示例:
1.django项目mysite,app应用book_show, 自定义other_filter.py,位置如下
book_show/
__init__.py
models.py
templatetags/
__init__.py
other_filter.py
views.py
2.other_filter.py,如下
from django import template
register = template.Library()
@register.filter(name="cut")
def str_pre(value, pre_str):
"""添加前缀"""
return "{}-{}".format(pre_str, value)
3.使用
{# 首先导入自定义filter那个文件,之后就可以正常使用了 #}
{% load other_filter %}