标签:过滤器 false inf 信息 nothing 流程 pattern path extend
1.变量
在Django模板中遍历复杂数据结构的关键是句点字符,语法:{{ var_name}}
实例:views.py:
from django.shortcuts import render # Create your views here. import datetime def hello(request): s = ‘hello‘ l = [111, 222, 333] dic = {"name": "hwk", ‘age‘: ‘22‘} date = datetime.date(2019, 6, 21) class Person(object): def __init__(self, name): self.name = name person_h = Person(‘H‘) person_w = Person(‘W‘) person_k = Person(‘K‘) person_list = [person_h, person_w, person_k] return render(request, "hello.html", {‘s‘: s, ‘l‘: l, ‘dic‘: dic, ‘date‘: date, ‘person_list‘: person_list})
templates:hello.html
<h4>{{ s }}</h4> <h4>列表:{{ l.0 }}</h4> <h4>列表:{{ l.2 }}</h4> <h4>字典:{{ dic.name }}</h4> <h4>日期:{{ date.year }}</h4> <h4>类对象列表:{{ person_list.0.name }}</h4>
urls.py:
from django.contrib import admin from django.urls import path from app import views urlpatterns = [ path(‘admin/‘, admin.site.urls), path(‘hello/‘, views.hello), ]
运行结果:
2.过滤器
语法:
{{obj|filter__name:param}}
如果一个变量是false或者为空,使用给定的默认值。否则,使用变量的值。
{{ value|default:"nothing" }}
返回值的长度。它对字符串和列表都起作用。
{{ value|length }}
如value是[‘a‘, ‘b‘, ‘c‘, ‘d‘] ,那么输出4。
{{ value|filesizeformat }}
表示将值格式化为一个人类可读的文件尺寸。例如value是123456789,输出的值是117.7MB。
等等过滤器。
3.标签
标签看起来像是这样的:{% tag %}。标签比变量更加复杂:一些在输出中创建文本,一些通过循环或逻辑来控制流程,一些加载其后的变量将使用到的额外信息到模板中。
for标签:遍历每一个元素。
{% for person in person_list %} <p>{{ person.name }}</p> {% endfor %}
for...empty:在给出的组是空的或没有找到时,可以有所操作。
{% for person in person_list %} <p>{{ person.name }}</p> {% empty %} <p>sorry,no person here</p> {% endfor %}
if标签:{% if %}会对一个变量求值,如果它的值是“True”(存在、不为空、且不是boolean类型的false值),对应的内容块会输出。
{% if num > 100 or num < 0 %} <p>无效</p> {% elif num > 80 and num < 100 %} <p>优秀</p> {% else %} <p>凑活吧</p> {% endif %}
with标签:使用一个简单地名字缓存一个复杂的变量,当你需要使用一个“昂贵的”方法(比如访问数据库)很多次的时候是非常有用的。
{% with total=business.employees.count %} {{ total }} employee{{ total|pluralize }} {% endwith %}
4.模板继承
Django模版引擎中最强大也是最复杂的部分就是模版继承了。模版继承可以让您创建一个基本的“骨架”模版,它包含您站点中的全部元素,并且可以定义能够被子模版覆盖的 blocks 。
实例:base.html
<!DOCTYPE html> <html lang="en"> <head> <link rel="stylesheet" href="style.css" /> <title>{% block title %}My amazing site{%/span> endblock %}</title> </head> <body> <div id="sidebar"> {% block sidebar %} <ul> <li><a href="/">Home</a></li> <li><a href="/blog/">Blog</a></li> </ul> {% endblock %} </div> <div id="content"> {% block content %}{% endblock %} </div> </body> </html>
这个模版,我们把它叫作 base.html
, 它定义了一个可以用于两列排版页面的简单HTML骨架。“子模版”的工作是用它们的内容填充空的blocks。
在这个例子中, block
标签定义了三个可以被子模版内容填充的block。 block
告诉模版引擎: 子模版可能会覆盖掉模版中的这些位置。
子模版可能看起来是这样的:
{% extends "base.html" %} {% block title %}My amazing blog{% endblock %} {% block content %} {% for entry in blog_entries %} <h2>{{ entry.title }}</h2> <p>{{ entry.body }}</p> {% endfor %} {% endblock %}
参考自:https://www.cnblogs.com/yuanchenqi/articles/8876892.html
标签:过滤器 false inf 信息 nothing 流程 pattern path extend
原文地址:https://www.cnblogs.com/lal666/p/11063763.html