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的模板层的主要内容,如果未能解决你的问题,请参考以下文章

Django之模板层

Django之模板层

Django的模板层

Django基础之视图(views)层模板层

肆拾陆 ---django视图层与模板层

053.Python前端Django框架模板层