zoukankan      html  css  js  c++  java
  • Django-模板继承

      模板继承可以让您创建一个基本的“骨架”模板,它包含您站点中的全部元素,并且可以定义能够被子模板覆盖的blocks

      base.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>blog</title>
        <script src="/static/js/jquery-3.2.1.min.js"></script>
        <script src="/static/bs/js/bootstrap.min.js"></script>   
    </head>
    <body>
    <div class="row" style="background-color:#5ea2d636 "><div class="col-md-1"></div><div class="col-md-10" style="background-color: white" id="text">
        <div class="header" >
        <p class="title"><a id='myfont' href="/blog/{{ username }}">{{ blog.title }}</a></p>
    </div>
        <div class="container-fluid">
        <div class="row">
            <div class="col-sm-9">
                {% block content %}
    {% endblock %}
    </div> </div> </div> </div><div class="col-md-1"></div> </div> </body> </html>

       这个base.html模板,它定义了一个简单HTML骨架,“子模板”的工作是用它们的内容填充空的blocks。block告诉模板引擎字模板可能会覆盖掉模板中的这些位置。

      子模板

    {% extends "base.html" %}
    {% block content %}
    
        <div>
            <h1>发表评论</h1>
            <span>评论人</span>
            <span>评论时间</span>
            <span>评论内容</span>
        </div>
        
    {% endblock %}

       extends标签是这里的关键。它告诉模板引擎,这个模板继承了另一个模板。当模板系统处理这个模板时,首先,它将定位父模板,在此例中,就是“base.html”。

    父模板的{% block %}标签中的内容总是被用作备选内容(fallback)

      这种方式使代码得到最大程度的复用,并且使得添加内容到共享的内容区域更加简单,例如部分范围内的导航

      使用模板继承时需注意:

      如果你在模板中使用{%  extends %}标签,它必须是模板中的第一个标签,其他的任何情况下,模板继承都无法工作;

      在base模板中设置越多的{% block %}标签越好。子模板不必定义全部父模板中的blocks,所以,您可以在大多数blocks中填充合理的默认内容。然后,只定义你需要的那一个,多一点钩子总比少一点好;

      如果你发现你自己在大量的模板中复制内容,那可能意味着你应该把内容移动到父模板中的一个{% block %}中;

      为了更好的可读性,你也可以给你的{% endblock %}标签一个名字,在大型模板中,这个方法可以帮你清楚的看到哪一个{% block %}标签被关闭了

    {% block content %}
    .....
    {% endblock content%}

      最后,请注意您并不能在一个模板中定义多个相同名字的block标签,这个限制的存在是因为block标签的作用是双向的,这个意思是:block标签不仅提供了一个坑去填,它还在父模板中定义了填坑的内容。如果在一个模板中有两个名字一样的block标签,模板的父模板将不知道使用哪个block的内容

      

  • 相关阅读:
    vscode常用插件
    2019前端面试总结
    用户注册登录的逻辑
    Vue项目各个文件夹的作用
    Gulp & webpack 配置详解
    Webpack 配置入门
    开始一个React项目(一)一个最简单的webpack配置
    资源加载过程
    关于Netty Pipeline中Handler的执行顺序问题
    解压版中文乱码问题MYSQL中文乱码
  • 原文地址:https://www.cnblogs.com/iamluoli/p/9083453.html
Copyright © 2011-2022 走看看