模板繼承與導入


模板繼承的場景

情況1:通常寫頁面都有個模板用來框定頭部LOGO頁面,左側導航菜單,只有右部的內容不同。如果不使用模板就大量重復工作。

    特別如果頭部或者左側導航需要修改或者添加,所有頁面都需要修改。django 通過模板繼承解決。

情況2:一個頁面如果內容特別多,不可能都一起寫同一個頁面。比如京東首頁內容非常多。如何解決了?django通過include導入其他頁面。

一:模版繼承

  1)繼承使用

    步驟1:母板里寫入block,就可以被繼承,content是名稱 

    {% block title %}
    {% endblock%}

    {% block “content“ %}
    {% endblock%}

    步驟2:子頁面通過extends指定繼承那個模板

    {% extends 'master.html'%} #繼承那個模板

    {% block “content“ %} 這個地方就是替換模板block “content“
        <ul>
            {% for i in u%}
                <li>{{i}}</li> 
            {%endfor%}
    {% endblock%}

    2)如果子頁面有自己的css,js 怎么用了?
  A)如果是在子頁面寫CSS和JS,CSS就不是在頭部了,而JS也不是在<body>之前,假如要引用jquery,子頁面寫的JS會在jquery引用前面,就會不生效

  B)繼承CSS與JS都是共有的。
        

  解決方法:

  在模板里css 和js位置在寫個block塊。然后在block里引入,在這個block寫自己的js和css
        注:block和順序沒有關系

二:模板引入使用

  3)一個頁面只能繼承一個模板,如何解決了?如何使用多個模板,或者引入其他頁面

    <% include "a.html" %> 可以引用多次

  4)模板,include,子頁面怎么渲染?
        先把自己渲染成字符串,在拿模板和include渲染,所以不存在渲染問題(可以把子頁面繼承include當做一個整頁面)

三:示例

    #url.py
        url(r'^tpl1$',views.tpl1),
        url(r'^tpl2$',views.tpl2),
        url(r'^tpl3$',views.tpl3),

    #views.py

        def tpl1(request):
            u=[1,2,3]
            return render(request,"tp1.html",{"u":u})
        
        def tpl2(request):
            name="alex"
            return render(request,"tp2.html",{"name":name})
        
        def tpl3(request):
            status="已修改"
            return render(request,"tp3.html",{"status":status})

    #模塊:master.html
        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title>
                {% block title %}{% endblock %} <!--這里用來設置標題-->
            </title>
            <link rel="stylesheet" href="/static/common.css">
        
            {% block css %}<!--這里用來設置子頁面自己的css-->
            {% endblock %}
        </head>
        <body>
            {% block content %}<!--這里用來設置子頁面自己的內容-->
            {% endblock %}
            <script src="/static/js/jquery-1.12.4.js"></script>
          <script src="/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
            {% block js %}<!--這里用來設置子頁面自己的js-->
            {% endblock %}
        </body>
        </html>

    #子頁面:tp1.html
        {% extends "master.html" %} <!-- 繼承那個模板-->

        {% block title %}
            用戶管理
        {% endblock %}
        
        {% block css %}
            <style>
                body{
                    background-color: aqua;
                }
            </style>
        {% endblock %}
        
        {% block content %}
            <h1>用戶管理</h1>
            <ul>
                {% for i in u %}
                    <li>{{ i }}</li>
                {% endfor %}
            </ul>
        {% endblock %}
    #子頁面:tp2.html
        {% extends "master.html" %}
        
        {% block content %}
            <h1>修改密碼{{ name }}</h1>
            {% include "tp3.html" %} <!-- 引入其他頁面-->
        {% endblock %}

    #include頁面:tp3.html
    <div>
        <input type="text">
        <input type="button" value="++">
    </div>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM