lxinghua

博客园 首页 新随笔 联系 订阅 管理

一、常用标签

模板标签

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

标签语法:由{% %}来定义的,例如:{% tag %} {% endtag %}

 常用标签

1、 if/elif/else:可以使用and/or/in/not/==/!=/<=/>=,来进行判断。ifequal/ifnotequal   li = ['x', 'y', 'z']

2、 for...in...:跟python中的for...in...用法一样。

forloop.counter:当前迭代的次数,下标从1开始。 1,2,3

forloop.counter0:当前迭代的次数,下标从0开始。0,1,2

forloop.revcounter:当前迭代的次数,下标从大到小。3,2,1

forloop.revcounter0:当前迭代的次数,下标从大到小。2,1,0

forloop.first:返回bool类型,如果是第一次迭代,返回True,否则返回Flase。

forloop.last:返回bool类型,如果是最后一次迭代,返回True,否则返回Flase。

forloop.parentloop:如果发送多层for循环嵌套,那么这个变量返回的是上一层的for。

3、 for...in...empty...:如果没有数据,跳转到empty中。

4、 load:加载第三方标签,最常用的是{% load static %}。

5、 url:返回一个命名了的URL的绝对路径。

6、 with:缓存一个变量。

7、 autoescape:开启和关闭自动转义。

<!--if的例子-->
{% if name == 'python' %}
    这个是python的页面
{% elif name == 'django' %}
    这个是django的页面
{% else %}
    哈哈哈! 是{{ name }}的呢!
{% endif %}
<!--for的例子-->
{% for i in ls %}
    {% if forloop.counter == 1 %}
        <li>这个是第一个值</li>
    {% else %}
        <li>{{ i }}</li>
    {% endif %}
{% endfor %}
<!--url页面转换的例子-->
<!--urls.py文件代码-->
    path('index5/', views.index_5),
    path('article_new/', views.article_new, name='new_article'),
    path('test/<int:t_id>/', views.test, name='test'),
<!--html代码   -->
    <a href="/book/index5/">到过滤器那个页面</a><br>
    <a href="{% url 'new_article' %}">新的文章</a><br>
    <a href="{% url 'test' 123 %}">url加参数传递</a><br>
    
<!--with的使用    -->
{% with test_name as tn %}
    11111{{ tn }}<br>
    22222{{ tn }}
{% endwith %}
<!--autowscape的使用 -->
原始的:{{ html }}<br>
过滤器方式:{{ html |safe }}<br>
标签方式:
    {% autoescape off %}
        {{ html }}<br>
    {% endautoescape %}

 

二、模板的继承与引用

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

1. 创建三个模板文件,base.html, indexxx.html, ss.html

 

 2. base.html中的内容

 

 3. ss.html中的内容

 

 4. indexxx.html中的内容

 

 模板继承的总结

模板基础层使用extends标签实现。通过使用block来给子模版开放接口。

1. extends必须是模板中的第一个出现的标签。

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

3. 如果出现重复代码,就应该考虑使用模板。

4. 尽可能多的定义block,方便子模板实现更细的需求。

5. 如果在某个block中,要使用父模板的内容,使用block.super获取。

posted on 2022-12-24 12:32  興華  阅读(45)  评论(0编辑  收藏  举报