模板

作为Web 框架,Django 需要一种很便利的方法以动态地生成HTML。最常见的做法是使用模板。模板包含所需HTML输出的静态部分,以及一些特殊的语法,描述如何将动态内容插入。

变量

        用{{}}包围的是变量,如`person_name`,

过滤器

可以通过使用 过滤器来改变变量的显示。

        {{ship_date|date:"F j, Y"}}把ship_date变量传递给过滤器,并给date过滤器传递了一个参数“F j, Y”,date过滤器以给定参数的形式格式化日期

default

如果一个变量是false或者为空,使用给定的默认值。否则,使用变量的值。例如:

{{ value|default:"nothing" }}

如果 value没有被提供,或者为空, 上面的例子将显示“nothing”。

length

返回值的长度。它对字符串和列表都起作用。例如:

{{ value|length }}

filesizeformat

将该数值格式化为一个 “人类可读的” 文件容量大小 (例如 '13 KB', '4.1 MB', '102 bytes', 等等)。例如:

{{ value|filesizeformat }}  

标签

用{% %}包围的是块标签,如{%if ordered_warranty%}

for

循环数组中的每个元素。例如,显示 athlete_list中提供的运动员列表:

    {% for athlete in athlete_list %}

  • ` athlete`.`name `
  • {% endfor %}

if, elif, and else

计算一个变量,并且当变量是“true”是,显示块中的内容:

{% if athlete_list %}

Number of athletes: {{ athlete_list|length }}

{% elif athlete_in_locker_room_list %}

Athletes should be out of the locker room soon!

{% else %}

No athletes.

{% endif %}

自定义标签和过滤器

代码布局

在app下创建一个templatetags包,然后再里面创建相应的python处理代码

在模板中{% load 自定义处理模块名 %}加载

自定义标签处理代码

from django import template

register = template.Library()

@register.simple_tag

def current_time(format_string):

return datetime.datetime.now().strftime(format_string)

html中

{% current_time '%Y-%m-%d %X' %}


模板继承

模版继承可以让您创建一个基本的“骨架”模版,它包含您站点中的全部元素,并且可以定义能够被子模版覆盖的 blocks 。

        母板:

{% block title %}My amazing site{% endblock %}



{% block content %}{% endblock %}

它定义了一个可以用于两列排版页面的简单HTML骨架。“子模版”的工作是用它们的内容填充空的blocks。

在这个例子中, block 标签定义了三个可以被子模版内容填充的block。 block 告诉模版引擎: 子模版可能会覆盖掉模版中的这些位置。


        子板:

extends标签是这里的关键。它告诉模版引擎,这个模版“继承”了另一个模版。当模版系统处理这个模版时,首先,它将定位父模版——在此例中,模版引擎将注意到 base.html 中的三个 block 标签,并用子模版中的内容来替换这些block

{% extends "base.html" %}

{% block title %}My amazing blog{% endblock %}

{% block content %}

{% for entry in blog_entries %}

` entry`.`title `

` entry`.`body `

{% endfor %}

{% endblock %}