码迷,mamicode.com
首页 > 其他好文 > 详细

Django的模板层

时间:2019-06-21 12:29:05      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:过滤器   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

Django的模板层

标签:过滤器   false   inf   信息   nothing   流程   pattern   path   extend   

原文地址:https://www.cnblogs.com/lal666/p/11063763.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!