Django——模板语法

模板

模板是web框架中一种方便动态生成HTML的一种后端工具。模板包括有html的静态部分,以及插入动态内容的语法部分。
Django 可以配置一个或多个模板引擎,默认的是DTL,常见的还有 jinja2模板,例如 Flask 使用的就是 jinja2 模板。

使用模板语法

在web页面中,很多页面都具有公共部分,如果每个页面都写了一堆重复代码,就显得累赘。用模板语法来建立一个基础模板是一个很好的办法。

模板的继承
# 一个基础的模板 index.html
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <p>公共部分·公共部分·公共部分·公共部分·公共部分</p>
    <title>{% block title %}首页{% endblock %}</title>
    <p>公共部分·公共部分·公共部分·公共部分·公共部分</p>
</head>
<body>
    <p>公共部分·公共部分·公共部分·公共部分·公共部分</p>
    <p>公共部分·公共部分·公共部分·公共部分·公共部分</p>
    {% block body1 %}
    <span>这是首页的私有部分</span>
    {% endblock %}
    <p>公共部分·公共部分·公共部分·公共部分·公共部分</p>
    {% block body2 %}
    <span>这是首页的私有部分</span>
    {% endblock %}
    <p>公共部分·公共部分·公共部分·公共部分·公共部分</p>
</body>
</html>

现在写一个与首页大部分相同,只有是有部分不一样的页面

{% extends 'index.html' %}
{% block title %}第二页{% endblock %}
{% block body1 %}
<span>这是第二页的私有部分1</span>
{% endblock %}
{% block body1 %}
<span>这是第二页的私有部分1</span>
{% endblock %}
文件加载
<!--加载静态文件-->
{% load staticfiles %}
<!--load主要是加载一些文件-->
<!--引用静态文件: static/image/1.png-->
{% static ‘image/1.png’ %}
<!--引用url: user app下的index路由 /user/index-->
{% url ‘user:index’ %}
<!--引用url:带参数0   /user/index/0/-->
{% url ‘user:index’ 0 %}
引用变量

变量是由后端传递的一些动态数据

<!--变量的引用形式-->
{{variable}}
<!--变量的可以是python中的变量,常量,列表,元组,字典,对象等-->
<!--对变量进一步查找-->
<!--字典根据键查找-->
{{dict[key]}}
<!--列表根据下标查找-->
{{list.0}}
<!--属性查找-->
{{obj.name}}
<!--方法查找-->
{{obj.say()}}

在django模板语法中,如果变量不存在,将使用setting.py中 变量TEMPLATE_STRING_IF_INVALID的值代替

过滤器的使用
<!--过滤器的使用形式-->
{{variable|filter}}
<!--支持采用链式方式使用-->
{{text|escape|linebreaks}}
<!--可以携带参数(显示变量前三十个词)-->
{{bio|truncatewords:30}}
<!--参数中如果带空格,需要用引号引起来-->
{{list|join:", "}}
<!--django中常用的内建过滤器--> 
add  {{value|add:"2"}} <!--value值加2-->
addslashes  {{value|addslashes}}  <!--在value中的引号前增加反斜线-->
capfirst    {{value|capfirst}}    <!--value的第一个字符转化成大写形式-->
cut         {{value|cut:arg}}     <!--从给定value中删除所有arg的值-->
自定义过滤器函数
#myfilter.py
from django import template

@register.filter
def filter1(value,*arg)
    return "value是{0}参数有{1}".format(value,arg)

使用:

<!--test.html-->
<!--使用自定义filter前应先加载filter文件-->
{% load myfilter.py %}
{{value|filter: "6"}}
{{value|filter}}
标签的使用
<!--标签的使用形式-->
{% tag %}
<!--在输出时创建一些文本/通过执行循环和一些逻辑来实现控制流/装载一些外部信息进入模板-->
{% extends “base.html” %} <!--对指定父模板进行扩展-->  
{% extends variable %}  <!--变量可以是一个字符串-->
{% autoesape off %}   (内容)  {% endautoescape %} <!--内容不需要转义-->
{% block %}  (定议块内容) {% endblock %}  <!--定义可被子孙重写的模块-->
{% comment %}     (内容)    {% endcommon %}  <!--忽略标签内容-->
<tr class="{% cycle list %}">  ...  </tr> <!--循环时轮流使用给定字符串列表中的值-->
标签
<!--条件标签-->
{% if ... %}
{% elif ... %}
{% else %}
{% endif %}

<!--循环标签:{% for %} 在一个序列上迭代。-->
{% for .. in .. %}
{% endfor %}

<!--比较标签:{% ifequal %} 标签比较两个值,当他们相等时,显示在 {% ifequal %} 和 {% endifequal %} 之中所有的值。-->
{% ifequal %}
{% else %}
{% endifequal %}

猜你喜欢

转载自blog.csdn.net/qq_37049781/article/details/81005748
今日推荐