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


    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将不会渲染。

  • 相关阅读:
    SQL2000中创建作业(定时查询,更新)(转)
    Windows下如何安装MongoDB
    开发高性能的MongoDB应用—浅谈MongoDB性能优化(转)
    大数据时代的数据存储,非关系型数据库MongoDB(一)(转)
    Memcached在Windows下的配置和使用(转)
    mysql中去重 distinct 用法
    k8s install
    3.Docker与LXC、虚拟化技术的区别——虚拟化技术本质上是在模拟硬件,Docker底层是LXC,本质都是cgroups是在直接操作硬件
    2.LXC和namespace介绍
    python类中两个列表实例如何相加或相减
  • 原文地址:https://www.cnblogs.com/pywjh/p/10161293.html
Copyright © 2020-2023  润新知