【django学习-12】模板4:模板继承

  • 前言:模板继承是通过模板标签来实现的,其作用是将多个模板文件的共同代码集中到一个新的模板文件中,然后各个模板直接调用新的模板文件,从而生成html网页,这样可以减少模板之间重复的代码。
  • 母模板:可以在母模板中添加多个块标签,每个块标签取不同的名称,如下格式,content是块标签名称
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>母模板</title>
</head>
<body>
<section>
    <h1>顶部导航</h1>
    <p>Django学习-xwl</p>
    <hr>
</section>

<!--这是一段注释。block是一个块标签, content是标签名称-->
{% block content %} 

{% endblock content %}

<p>---------自动化教程---------</p>

<!--这是一段注释。block是一个块标签, ad是标签名称-->
{% block ad %} {% endblock ad %}


<section>
    <br><br><br><br><hr>
    <h1>底部导航</h1>
    <p>底部一些友情链接啊,网站导航,版权啊</p>
</section>
</body>
</html>
  • 子模板:extends继承母模板的页面内容,填充 block块标签内容,指定对应的名称就可以了。不是所有的block都需要填充,如果母模板中blcok有默认内容,子模板不填充的话,就显示默认的内容
{% extends "temp1.html" %}

{% block content %}
    {{ block.super }}
    <h1>这是子模板新增的内容</h1>
{% endblock content %}

{% block ad %}
    {% for i in list %}
        <p>{{ i }}</p>
    {% endfor %}
{% endblock ad %}
  • views与urls
#views.py
def sonpag(req):
    L = ["appium","selenium","python","requests","allure"]

    return render(req,"sonpag.html",context={"list":L})

#urls.py
urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/', views.index),
    path('tag/', views.tag),
    path('login/', views.login),
    path('sonpag/', views.sonpag),
]

  • 总结
    • 如果在模板中使用 {% extends %} ,必须保证其为模板中的第一个模板标记。 否则,模板继承将不起作用。
    • 一般来说,基础模板中的 {% block %} 标签越多越好。 记住,子模板不必定义父模板中所有的代码块,因此你可以用合理的缺省值对一些代码块进行填充,然后只对子模板所需的代码块进行(重)定义。 俗话说,钩子越多越好;
    • 如果发觉自己在多个模板之间拷贝代码,你应该考虑将该代码段放置到父模板的某个 {% block %} 中。
    • 不允许在同一个模板中定义多个同名的 {% block %} 。 存在这样的限制是因为block 标签的工作方式是双向的。
posted @ 2022-09-09 20:45  Tony_xiao  阅读(42)  评论(0编辑  收藏  举报