django模板语法
Posted chenwenyin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django模板语法相关的知识,希望对你有一定的参考价值。
- 变量
- 列表
- 字典
- 过滤器
- if/else 标签
- for 标签
- ifequal/ifnotequal 标签
- 注释标签
- include 标签
- 模板继承
变量
## view.py
from django.shortcuts import render
def foo(request):
views_name = "xxx"
return render(request,"index.html", {"name":views_name})
## index.html
<p>{{ name }}</p>
列表
## view.py
from django.shortcuts import render
def foo(request):
views_list = ["xxx","123","egon"]
return render(request, "index.html", {"views_list": views_list})
## index.html
"""
可以用 . 索引下标取出对应的元素
"""
<p>{{ views_list }}</p> # 取出整个列表
<p>{{ views_list.0 }}</p> # 取出列表的第一个元素
字典
## view.py
from django.shortcuts import render
def foo(request):
views_dict = {"name":"xxx", "age":18}
return render(request, "index.html", {"views_dict": views_dict})
## index.html
"""
可以用 .键 取出对应的值
"""
<p>{{ views_dict }}</p> # 取出整个字典
<p>{{ views_dict.name }}</p> # 取出name的值
过滤器
# 基本语法
{{ 变量名 | 过滤器:可选参数 }}
"""
模板过滤器可以在变量被显示前修改它,过滤器使用管道字符
{{ name|lower }}
{{ name }} 变量被过滤器 lower 处理后,文档大写转换文本为小写。
------------------------------------------------------------------------------
过滤管道可以被套接,既是说,一个过滤器管道的输出又可以作为下一个管道的输入:
{{ my_list|first|upper }}
以上实例将第一个元素并将其转化为大写。
"""
# 带参数的过滤器
"""
{{ bio|truncatewords:"30" }}
这个将显示变量 bio 的前30个词
"""
# default
"""
default 为变量提供一个默认值。
如果 views 传的变量的布尔值是 false,则使用指定的默认值。
{{ value|default:"nothing"}}
"""
# length
"""
返回对象的长度,适用于字符串和列表
字典返回的是键值对的数量,集合返回的是去重后的长度
"""
## view.py
from django.shortcuts import render
def foo(request):
name ="菜鸟教程"
return render(request, "index.html", {"name": name})
## index.html
{{ name|length}}
# filesizeformat
"""
以更易读的方式显示文件的大小(即‘13 KB‘, ‘4.1 MB‘, ‘102 bytes‘等)
{{ value|filesizeformat}}
列如 value 是 123456789,输出将会是 117.7 MB。
"""
# date
"""
根据给定格式对一个日期变量进行格式化。
格式 Y-m-d H:i:s 返回 年-月-日 小时:分钟:秒 的格式时间
"""
## view.py
from django.shortcuts import render
def foo(request):
import datetime
now =datetime.datetime.now()
return render(request, "index.html", {"time": now})
## index.html
{{ time|date:"Y-m-d" }}
# truncatechars
"""
如果字符串包含的字符总个数多于指定的字符数量,那么会被截断掉后面的部分。
截断的字符串将以 ... 结尾。
{{ value|truncatechars:9}}
"""
# safe
"""
Django的模板中会对HTML标签和JS等语法标签进行自动转义,这样是为了安全,防止xss攻击。如果不想用转义,就使用safe。
{{ value|safe }}
"""
# upper、lower
"""
转大写和转小写
"""
if/else 标签
# 基本语法
"""
{% if condition1 %}
... display 1
{% elif condition2 %}
... display 2
{% else %}
... display 3
{% endif %}
{% if %} 标签接受 and, or 或者 not 关键字来对多个变量做判断, 或者对变量取反( not )
"""
## view.py
from django.shortcuts import render
def foo(request):
views_num = 88
return render(request, "index.html", {"num": views_num})
## index.html
{%if num > 90 and num <= 100 %}
优秀
{% elif num > 60 and num <= 90 %}
合格
{% else %}
一边玩去~
{% endif %}
for 标签
# 基本遍历
{% for i in views_list %}
{{ i }}
{% endfor %}
# 反向遍历
{% for athlete in athlete_list reversed %}
...
{% endfor %}
# 遍历字典
{% for key,val in dic.items %}
<p>{{ key }}:{{ val }}</p>
{% endfor %}
# {% empty %}
"""
for标签带有一个可选的{% empty %} 从句,以便在给出的组是空的或者没有被找到时,可以有所操作
"""
{% for person in person_list %}
<p>{{ person.name }}</p>
{% empty %}
<p>sorry,no person here</p>
{% endfor %}
ifequal/ifnotequal 标签
"""
{% ifequal %} 标签比较两个值是否相等
{% ifnotequal %} 标签比较两个值是否不相等
"""
{% ifequal section ‘sitenews‘ %}
<h1>Site News</h1>
{% else %}
<h1>No News Here</h1>
{% endifequal %}
注释标签
## Django 注释使用 {# #}
{# 这是一个注释 #}
include 标签
"""
{% include %} 标签允许在模板中包含其它的模板的内容。
"""
{% include "nav.html" %}
模板继承
"""
模板可以用继承的方式来实现复用
"""
## base.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<h1>Hello World!</h1>
<p>菜鸟教程 Django 测试。</p>
{% block mainbody %}
<p>original</p>
{% endblock %}
</body>
</html>
"""
以上代码中,名为 mainbody 的 block 标签是可以被继承者们替换掉的部分。
所有的 {% block %} 标签告诉模板引擎,子模板可以重载这些部分。
"""
## index.html 中继承 base.html,并替换特定 block
{%extends "base.html" %}
{% block mainbody %}
<p>继承了 base.html 文件</p>
{% endblock %}
"""
第一行代码说明 index.html 继承了 base.html 文件。后面相同名字的 block 标签用以替换 base.html 的相应 block。
注意:!!!如果你在模版中使用 {% extends %} 标签,它必须是模版中的第一个标签。其他的任何情况下,模版继承都将无法工作。
"""
以上是关于django模板语法的主要内容,如果未能解决你的问题,请参考以下文章
每当我将 Python 代码放入 Django 模板时都会出现语法错误