Django 2.1.7 建立应用模板 Django 2.1.7 配置公共静态文件、公共模板路径html
docs.djangoproject.com/zh-hans/2.1…python
模板语言包括4种类型,分别是:django
模板变量的做用是计算并输出,变量名必须由字母、数字、下划线(不能如下划线开头)和点组成。浏览器
语法以下:bash
{{变量}}
复制代码
如今来看看前面篇章中写到的模板遍历代码以下:服务器
{% for value in info.m_query %}
<tr>
<th scope="row">{{ value.id }}</th>
<td>{{ info.server_name }}</td>
<td>{{ value.name }}</td>
<td>{{ value.port }}</td>
<td><a href="deleteMiddlewareinfo?id={{ value.id }}" class="btn btn-outline-primary">删除</a></td>
</tr>
{% endfor %}
复制代码
当模版引擎遇到点如info.m_query,会按照下列顺序解析: 1.字典info['m_query'] 2.先属性后方法,将info看成对象,查找属性m_query,若是没有再查找方法m_query() 3.若是是格式为info.0则解析为列表info[0]函数
若是变量不存在则插入空字符串。oop
在模板中调用方法时不能传递参数。ui
1)打开assetinfo/views.py文件,建立视图temp_var。url
def temp_var(request):
dict={'title':'字典键值'}
# 查询全部服务器的信息
server_list = ServerInfo.objects.all()
context={'dict':dict,'server_list':server_list}
return render(request,'assetinfo/temp_var.html',context)
复制代码
2)打开assetinfo/urls.py文件,配置url。
urlpatterns = [
# ex:/assetinfo/temp_var
path('temp_var', views.temp_var),
...
]
复制代码
3)修改在templates/assetinfo下建立temp_var.html。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
模板变量:<br/>
{{dict.title}}<br/>
{% for server in server_list %}
{{ forloop.counter }} -- {{ server.server_hostname }}<br>
{% endfor %}
</body>
</html>
复制代码
4)运行服务器,在浏览器中输入以下网址。
http://127.0.0.1:8000/assetinfo/temp_var
复制代码
5)浏览效果以下图。
语法以下:
{%代码段%}
复制代码
for标签语法以下:
{%for item in 列表%}
循环逻辑
{{forloop.counter}}表示当前是第几回循环,从1开始
{%empty%}
列表为空或不存在时执行此逻辑
{%endfor%}
复制代码
if标签语法以下:
{%if ...%}
逻辑1
{%elif ...%}
逻辑2
{%else%}
逻辑3
{%endif%}
复制代码
比较运算符以下:
注意:运算符左右两侧不能紧挨变量或常量,必须有空格。
==
!=
<
>
<=
>=
复制代码
布尔运算符以下:
and
or
not
复制代码
1)打开assetinfo/views.py文件,建立视图temp_tag。
def temp_tags(request):
context={'list':ServerInfo.objects.all()}
return render(request,'assetinfo/temp_tag.html',context)
复制代码
2)打开assetinfo/urls.py文件,配置url。
urlpatterns = [
# ex:/assetinfo/temp_tags
path('temp_tags', views.temp_tags),
]
复制代码
3)在templates/assetinfo下建立temp_tag.html。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
{%for item in list%}
{%if item.id <= 2%}
<li style="background-color: red;">{{item.server_hostname}}</li>
{%elif item.id <= 3%}
<li style="background-color: blue;">{{item.server_hostname}}</li>
{%else%}
<li style="background-color: green;">{{item.server_hostname}}</li>
{%endif%}
{%empty%}
<li>对不起,没有服务器</li>
{%endfor%}
</ul>
</body>
</html>
复制代码
4)运行服务器,在浏览器中输入以下网址。
http://127.0.0.1:8000/assetinfo/temp_tags
复制代码
浏览器显示以下:
语法以下:
|
来应用过滤器,用于进行计算、转换操做,能够使用在变量、标签中。:
传递参数。变量|过滤器:参数
复制代码
长度length,返回字符串包含字符的个数,或列表、元组、字典的元素个数。
默认值default,若是变量不存在时则返回默认值。
data|default:'默认值'
复制代码
日期date,用于对日期类型的值进行字符串格式化,经常使用的格式化字符以下:
value|date:"Y年m月j日 H时i分s秒"
复制代码
1)打开assetinfo/views.py文件,建立视图temp_filter。
def temp_filter(request):
context={'list':ServerInfo.objects.all()}
return render(request,'assetinfo/temp_filter.html',context)
复制代码
2)打开assetinfo/urls.py文件,配置url。
urlpatterns = [
# ex:/assetinfo/temp_filter
path('temp_filter', views.temp_filter),
]
复制代码
3)在templates/assetinfo下建立temp_filter.html。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
{%for item in list%}
{%if item.server_hostname|length > 4%}
<li style="background-color: darkseagreen;">
{{item.server_hostname}}
---默认时间格式为:
{{item.server_shelves_date}}
</li>
{%elif item.server_hostname|length < 2%}
<li style="background-color: cadetblue;">
{{item.server_hostname}}
---默认时间格式为:
{{item.server_shelves_date}}
</li>
{%else%}
<li style="background-color: green;">
{{item.server_hostname}}
---格式化时间为:
{{item.server_shelves_date|date:"Y-m-j"}}
</li>
{%endif%}
{% empty %}
<li>对不起,没有服务器</li>
{%endfor%}
</ul>
</body>
</html>
复制代码
4)运行服务器,在浏览器中输入以下网址。
http://127.0.0.1:8000/assetinfo/temp_filter
复制代码
过滤器就是python中的函数,注册后就能够在模板中看成过滤器使用,下面以求余为例开发一个自定义过滤器mod。
1)在应用中建立templatetags目录,当前示例为"assetinfo/templatetags",建立_init_文件,内容为空。
2)在"assetinfo/templatetags"目录下建立filters.py文件,代码以下:
#导入Library类
from django.template import Library
#建立一个Library类对象
register=Library()
#使用装饰器进行注册
@register.filter
#定义求余函数mod,将value对2求余
def mod(value):
return value%2 == 0
复制代码
3)在templates/assetinfo/temp_filter.html中,使用自定义过滤器。
{%load filters%}
复制代码
{%load filters%}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
{%for item in list%}
{%if item.id|mod == 1%}
<li style="background-color: darkseagreen;">
{{ item.id|mod }}
{{item.server_hostname}}
---默认时间格式为:
{{item.server_shelves_date}}
</li>
{%else%}
<li style="background-color: #b3d4fc;">
{{ item.id|mod }}
{{item.server_hostname}}
---格式化时间为:
{{item.server_shelves_date|date:"Y-m-j"}}
</li>
{%endif%}
{% empty %}
<li>对不起,没有服务器</li>
{%endfor%}
</ul>
</body>
</html>
复制代码
4)运行服务器,浏览效果以下:
过滤器能够接收参数,将assetinfo/templatetags/filters.py中增长mod_num函数。
#使用装饰器进行注册
@register.filter
#定义求余函数mod_num,将value对num求余
def mod_num(value,num):
return value%num
复制代码
5)在templates/assetinfo/temp_filter.html中修改遍历时判断代码。
{%if item.id|mod_num:3 %}
复制代码
6)运行服务器,浏览效果以下:
在模板中使用以下模板注释,这段代码不会被编译,不会输出到客户端;html注释只能注释html内容,不能注释模板语言。
1)单行注释语法以下:
{#...#}
复制代码
注释能够包含任何模版代码,有效的或者无效的均可以。
{# { % if foo % }bar{ % else % } #}
复制代码
2)多行注释使用comment标签,语法以下:
{%comment%}
...
{%endcomment%}
复制代码