1. 模板文件的使用
静态部分,包含html、css、js。
动态部分,就是模板语言
render方法实现的步骤
def my_render(request):
# 1.加载模板文件,获取一个模板对象
temp = loader.get_template('booktest/index.html')
# 2.定义模板上下文,给模板传参数
context = RequestContext(request,{})
# 3.模板渲染
res_html = temp.render(context)
# 4.返回应答
return HttpResponse(res_html)
2.模板文件加载顺序
1)首先去配置的模板目录下面去找模板文件。
2)去INSTALLED_APPS下面的每个应用的templates去找模板文件,前提是应用中必须有templates文件夹。
3.模板变量
模板变量名是由数字,字母,下划线和点组成的,不能以下划线开头。
使用模板变量:{{模板变量名}}
模板变量的解析顺序:
例如:{{ book.btitle }}
- 首先把book当成一个字典,把btitle当成键名,进行取值book[‘btitle’]
- 把book当成一个对象,把btitle当成属性,进行取值book.btitle
- 把book当成一个对象,把btitle当成对象的方法,进行取值book.btitle
例如:{{book.0}}
- 首先把book当成一个字典,把0当成键名,进行取值book[0]
- 把book当成一个列表,把0当成下标,进行取值book[0]
如果解析失败,则产生内容时用空字符串填充模板变量。
使用模板变量时,.前面的可能是一个字典,可能是一个对象,还可能是一个列表。
4.模板标签
{% 代码段 %}
for循环:
{% for x in 列表 %}
# 列表不为空时执行
{% empty %}
# 列表为空时执行
{% endfor %}
可以通过{{ forloop.counter }}得到for循环遍历到了第几次。
if标签语法如下:
{% if 条件 %}
{% elif 条件 %}
{% else %}
{% endif %}
比较运算符如下:
关系比较操作符:> < >= <= == !=
注意:进行比较操作时,比较操作符两边必须有空格。
逻辑运算:not and or
过滤器
过滤器用于对模板变量进行操作。
date:改变日期的显示格式。
length:求长度。字符串,列表.
default:设置模板变量的默认值。
格式:模板变量|过滤器:参数
自定义过滤器。
自定义的过滤器函数,至少有一个参数,最多两个
参考资料:(模板标签和内置过滤器)链接
<head>
<title>过滤器</title>
</head>
<body>
<ul>
{%for book in list%}
{%if book.btitle|length > 4%}
<li style="background-color: red;">
{{book.btitle}}
---默认时间格式为:
{{book.bpub_date}}
</li>
{%else%}
<li style="background-color: green;">
{{book.btitle}}
---格式化时间为:
{{book.bpub_date|date:"Y-m-j"}}
</li>
{%endif%}
{%endfor%}
</ul>
</body>
</html>
自定义过滤器
在应用中创建templatetags目录,当前示例为"booktest/templatetags",创建_init_文件,内容为空
在"booktest/templatetags"目录下创建filters.py文件,代码如下:
#导入Library类
from django.template import Library
#创建一个Library类对象
register=Library()
#使用装饰器进行注册
@register.filter
#定义求余函数mod,将value对2求余
def mod(value):
return value%2 == 0
首先使用load标签引入模块
{%load filters%}
使用:
<!DOCTYPE html>
<html lang="en">
{% load filters %}
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
{% for my in my_list %}
{% if my|mod %}
<li> {{ my }} </li>
{% endif %}
{% endfor %}
</ul>
</body>
</html>