美文网首页
Python(四十八)模板标签

Python(四十八)模板标签

作者: Lonelyroots | 来源:发表于2022-01-11 22:10 被阅读0次

从2021年9月2日发文至今,Python系列(包括代码在内)共计90472个字、四十八篇!

1. 常用标签

标签在渲染的过程中提供任意的逻辑。
标签语法:由{% %}来定义的,例如:{%tag%} {%endtag%}


{% if %} {% elif %} {% else %} {% endif %}:判断是否满足条件。
{% ifequal %} {% endifequal %}:判断是否相等。
{% for i in li1 %} {% endfor %}:轮流取出列表中的数据li1,用变量i来接收。
{% for i in li1 %} {% if forloop.first %} {% elif forloop.last %} {% else %} {% endif %} {% endfor %}:轮流取出列表中的数据li1,用变量i来接收,第一个数据、最后一个数据、除了第一个和最后一个数据。
{% for n in null %}{% empty %}{% endfor %}:如果有数据,执行这个;如果无数据,执行empty。
<a href="{% url 'new' %}">我要去新网站首页</a>: a标签使用路由的name方式进行跳转,不需要复制网页链接。
<a href="{% url 'slide' 'chenhong'%}">我要去轮播图网页</a>:这里调用的是需要添加参数的路由,所以需要加参数。
{% with name as n %}{% endwith %}:重命名,缓存一个变量。
{% autoescape off %}{% endautoescape %}:关闭自动转义。


分路由book的模板文件index.html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>django</title>
</head>
<body>

{#    模板标签:一、常用模板标签#}

{% if name == 'python chenhong' and age == 20 %}
    大家好!
{% elif name != 'chenhong' %}
    大家也好!
{% else %}
    我不认识你!
{% endif %}

{% ifequal name 'python chenhong1' %}    {#如果不等于则是 ifnotequal#}
    chenhong今年20岁
{% endifequal %}

{% for i in li1 %}
    {{ i }}<br>
{% endfor %}

{% for i in li1 %}
    {% if forloop.first %}
        这第一个数据{{ i }}<br>
    {% elif forloop.last %}
        这是最后一个数据{{ i }}<br>
    {% else %}
        这是中间的数据{{ i }}<br>
    {% endif %}
{% endfor %}

{% for i in li1 %}
    {{ i }}的下标为{{ forloop.counter0 }}<br>        {# forloop.counter:下标从1开始,forloop.counter0:下标从0开始#}
{% endfor %}

{% for i in li1 %}
    {% for j in tu1 %}
        {% if forloop.parentloop.counter0 == 2 %}
            {{ i }}对应{{ j }}<br>
        {% else %}
            我是其他行数据{{ i }}对应的{{ j }}<br>
        {% endif %}
    {% endfor %}
{% endfor %}

{% for n in null %}
    有数据{{ n }}      {# 如果有数据,执行这个 #}
{% empty %}
    当前数据为空       {# 如果无数据,执行这个 #}
{% endfor %}

{#<a href="http://127.0.0.1:8000/book/new_book/" target="_blank">我要去新网站首页</a>         {# 通过a标签设置路由的方式访问网站,不建议这样做 #}
  {# 无参数的情况下 #}
<a href="{% url 'new' %}">我要去新网站首页</a>          {# a标签使用路由的name方式进行跳转,不需要复制网页链接 #}
  {# 有参数的情况下 #}
<a href="{% url 'slide' 'chenhong'%}">我要去轮播图网页</a>

{# 重命名,缓存一个变量 #}
{% with name as n %}
    我是{{ n }}
{% endwith %}

{# 关闭自动转义 #}
{# 方式一 #}
{#{{ html|safe }}#}
{# 方式二,通过autoescape进行开启和关闭-on和off #}
{% autoescape off %}
    {{ html }}
    {{ html }}
{% endautoescape %}

分路由book的urls.py代码:

from django.urls import path
# 从同级目录下导入文件
from . import views

urlpatterns = [
    path('old_book/',views.old_book),
    path('new_book/',views.new_book,name='new'),
    path('slide/<name>/',views.slide,name='slide'),      # 接收有参数的情况
    path('temp_1/',views.temp_1),
]

这个定义是刻意模糊的。 例如,一个标签可以输出内容,作为控制结构,例如“if”语句或“for”循环从数据库中提取内容,甚至可以访问其他的模板标签。

2. 模板的继承与使用

Django模版引擎中最强大也是最复杂的部分就是模版继承了。 模版继承可以让你创建一个基本的“骨架”模版,它包含您站点中的全部元素,并且可以定义能够被子模版覆盖的 blocks 。
先在如下目录创建三个HTML文件:


分路由book的urls.py文件:

from django.urls import path
# 从同级目录下导入文件
from . import views

urlpatterns = [
    path('child_1/',views.child_1),
]

分路由book的views.py文件:

from django.shortcuts import render
def child_1(request):
    return render(request,'book/child_1.html')

templates中创建的父级模板base.html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>
        {% block title %}
            这个是默认的标题
        {% endblock %}
    </title>
</head>
<body>

{% block head %}
    这是默认头部样式<br>
{% endblock %}

{% block content %}
    这是默认内容主体<br>
{% endblock %}

{% block bottom %}
    这是默认底部样式<br>
{% endblock %}

我是外面的样式

</body>
</html>

模板继承使用extends标签实现。通过使用block来给子模板开放接口。
1、extends必须是模板中的第一个出现的标签。
2、子模板中的所有内容,必须出现在父模板定义好的block中,否则django将不会渲染。
3、如果出现重复代码,就应该考虑使用模板。
4、尽可能多的定义block,方便子模板实现更细的需求。
5、如果在某个block中,要使用父模板的内容,使用block.super获取。
6、{% include 'book/child_2.html' %}:在child_1.html文件里引用child_2.html文件的内容。

templates中创建的子级模板child_1.html文件:

{#模板标签:二、模板的继承与引用#}

{# extends必须是第一个出现的标签,继承父类模板整个文件。 #}
{% extends 'book/base.html' %}

{# block里面的内容是可以修改的,而不是只能够继承,名字需和父级模板统一 #}
{% block title %}
    我是child1的标题
{% endblock %}

{% block head %}
    {{ block.super }}       {# 继承了父类的头部 #}
    我是child1的头部<br>
{% endblock %}

{% block bottom %}
    {{ block.super }}       {# 继承了父类的底部 #}
    我是child1的底部<br>
    {# 通过include进行模板的引用 #}
    {% include 'book/child_2.html' %}
{% endblock %}

{# 这个是不会被继承的 #}
{{ 我是不会被继承的 }}

templates中创建的子级模板child_2.html文件:

{#模板标签:二、模板的继承与引用#}

这是child2的页面底部 <br>

文章到这里就结束了!希望大家能多多支持Python(系列)!六个月带大家学会Python,私聊我,可以问关于本文章的问题!以后每天都会发布新的文章,喜欢的点点关注!一个陪伴你学习Python的新青年!不管多忙都会更新下去,一起加油!

Editor:Lonelyroots

相关文章

  • Python(四十八)模板标签

    从2021年9月2日发文至今,Python系列(包括代码在内)共计90472个字、四十八篇! 1. 常用标签 标签...

  • 最浅显易懂的Django系列教程(9)-常用标签

    常用的模板标签: if标签:if标签相当于Python中的if语句,有elif和else相对应,但是所有的标签都需...

  • 05-Django模板

    一、模板概述 模板组成 作用 优点 模板处理 二、定义模板 变量 标签 单行注释 标签if 标签for 标签com...

  • 05-Django模板

    一、模板概述 模板组成 作用 优点 模板处理 二、定义模板 变量 标签 单行注释 标签if 标签for 标签com...

  • 模板代码中的国际化

    Django模板中的翻译使用了两个模板标签,与Python代码中的语法略有不同。 为了让您的模板可以访问这些代码,...

  • Django模板标签

    知识点: 基本概念 常用标签 模板标签例子 模板继承与应用 注释标签 模板文件路径设置 模板标签 标签在渲染的过程...

  • go html模板的使用

    【模板标签】 模板标签用"{{"和"}}"括起来 【注释】 {{/* a comment /}}使用“{{/”和“...

  • 04-flask模板

    四、 模板 概念 模板语法 条件控制if 遍历for 结构标签 block 结构标签 extends 结构标签 i...

  • 【译】Tempy-高性能面向对象的HTML模板库

    高效的面向对象HTML模板(纯python) tempy是什么? 没有写一个标签就能创建HTML。tempy动态生...

  • 02-Flask之模板&模型

    一、模板 模板概念 Jinja2 模板语法 结构标签 block 静态资源的加载 结构标签 extends 结构标...

网友评论

      本文标题:Python(四十八)模板标签

      本文链接:https://www.haomeiwen.com/subject/yulucrtx.html