Django的模板层
Posted lal666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django的模板层相关的知识,希望对你有一定的参考价值。
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
以上是关于Django的模板层的主要内容,如果未能解决你的问题,请参考以下文章