Django——模板标签 模板的继承与引用

Django

  1. 模板标签
  2. 常用标签
  3. 模板的继承与引用

模板标签

  • 标签在渲染的过程中提供任意的逻辑
  • 标签语法: 由%}和 {% 来定义的,例如:{%tag%} {%endtag%}
  • 这个定义是刻意模糊的。 例如,一个标签可以输出内容,作为控制结构,例如“if”语句或“for”循环从数据库中提取内容,甚至可以访问其他的模板标签。

常用的标签

配置好url和视图

 views.py

# 模板标签
def tem_tags(request):
    return render(request, 'book/tags.html', context={
        'str1': 'Django',
        'str2': 'Flask',
        'fruit_list': ['apple', 'pear', 'orange'],
        'num_list': ['one', 'two', 'three'],
        "whats_your_name": 'whoaU?',
        'html': '<h1>hello world</h1>'
    })
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>模板标签</title>
    <style>
    </style>
</head>
<body>
<p></p>
if elif else
{% if str1 == 'tornado' %}
    这是tornado课程
{% elif str1 == str2 %}
    这是scrapy课程
{% else %}
    这是{{ str1 }}课程
{% endif %}
<br>

ifnotequal   ifequal 
{% ifnotequal str1 str2 %}
    {{ str1 }}{{ str2}}是两个不同的课程
{% endifnotequal %}
<br>
{% for foo in fruit_list %}
    {{ foo }}<br>
{% endfor %}
<br>

forloop.counter0
{% for foo in fruit_list %}
    {{ forloop.counter }}
    {% if forloop.counter0 == 1 %}
        {{ foo }}是梨子 <br>
    {% elif forloop.counter0 == 0 %}
        {{ foo }}是苹果 <br>
    {% else %}
        {{ foo }}是橘子
    {% endif %}
{% endfor %}
<br>

first  last
{% for foo in fruit_list %}
    {% if forloop.first %}
        first is {{ foo }} <br>
    {% endif %}
    {% if forloop.last %}
        last is {{ foo }} <br>
    {% endif %}
{% endfor %}
<br>

 forloop.parentloop.
{% for foo in num_list %}
    {% for fo in fruit_list %}
        {% if forloop.parentloop.counter0 == 1 %}
            {{ foo }} better {{ fo }} <br>
        {% else %}
            {{ foo }} {{ fo }} <br>
        {% endif %}
    {% endfor %}
{% endfor %}
<br>

url
<a href="{% url 'static' %}">跳转到静态文件演示页面(参数后面用空格隔开)</a>
<br>

with
{% with whats_your_name as o %}
    {{ o }}<br>
{% endwith %}
<br>

autoescape 
{% autoescape on %}
    {{ html }}
{% endautoescape %}
<br>
{% autoescape off %}
    {{ html }}
{% endautoescape %}
</body>

 页面结果:


 

 模板的继承与引用

  • Django模版引擎中最强大也是最复杂的部分就是模版继承了。 模版继承可以让你创建一个基本的“骨架”模版,它包含您站点中的全部元素,并且可以定义能够被子模版覆盖的 blocks 。
  • 模板继承使用extends标签实现。通过使用block来给子模板开放接口。
  • 1、extends必须是模板中的第一个出现的标签。
  • 2、子模板中的所有内容,必须出现在父模板定义好的block中,否则django将不会渲染。
  • 3、如果出现重复代码,就应该考虑使用模板。
  • 4、尽可能多的定义block,方便子模板实现更细的需求。
  • 5、如果在某个block中,要使用父模板的内容,使用block.super获取。

在模板文件夹中新建两个html文件

base.html文件中:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}base{% endblock %}</title>
    <style>
    </style>
</head>
<body>
  {% block content %}
      <p>这是基类模板文件</p>
  {% endblock %}
  {% block last %}
      <p>这是结尾的模板内容</p>
  {% endblock %}
</body>
</html>

 index_1.html文件中:

{% extends 'inheritance_reference/base.html' %}

然后配置到url和view视图将index_1渲染出来:

现在我们来更改block里面的内容,做成我们自己的东西,将index_1.py中对应名字的block内容进行更改

{% extends 'inheritance_reference/base.html' %}
{% block title %}
    我自己的网页
{% endblock %}
{% block content %}
    <p>这是我自己的中心内容,不是继承来的</p>
{% endblock %}
{% block last %}
    <p>这是我自己的结尾内容,不是继承来的</p>
{% endblock %}

 再渲染出来查看

接下来我们来继承父类base中的内容,并加上我们自己的内容

{% extends 'inheritance_reference/base.html' %}
{% block title %}
    我自己的网页
{% endblock %}
{% block content %}
    {{ block.super }}
    <p>这是我自己的中心内容,不是继承来的</p>
{% endblock %}
{% block last %}
    {{ block.super }}
    <p>这是我自己的结尾内容,不是继承来的</p>
{% endblock %}

现在再base中的block外面添加一句话,在index_1中也添加一句话

base.py

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}base{% endblock %}</title>
    <style>
    </style>
</head>
<body>
    {% block content %}
        <p>这是基类模板文件</p>
    {% endblock %}
    {% block last %}
        <p>这是结尾的模板内容</p>
    {% endblock %}
<p>这是base没有block包括的内容</p>
</body>
</html>

 index_1.py中:

{% extends 'inheritance_reference/base.html' %}
{% block title %}
    我自己的网页
{% endblock %}
{% block content %}
    {{ block.super }}
    <p>这是我自己的中心内容,不是继承来的</p>
{% endblock %}
{% block last %}
    {{ block.super }}
    <p>这是我自己的结尾内容,不是继承来的</p>
{% endblock %}
<p>这是index_1中没有block包括的内容</p>

 查看结果:

子模板中的所有内容,必须出现在父模板定义好的block中,否则django将不会渲染。

猜你喜欢

转载自www.cnblogs.com/pywjh/p/10161293.html