亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將模板分為幾個部分并包括每個部分是否不好?

將模板分為幾個部分并包括每個部分是否不好?

qq_遁去的一_1 2021-03-22 16:19:52
我有一個基本模板,我想分為三個部分:頁眉,正文,頁腳。然后,我使用基本模板包括三個子模板。但是,從我所看到的情況來看,這意味著我無法覆蓋{{block}}內容。那么使用包含一個壞主意嗎?還是有一種方法可以覆蓋包含的模板中的塊內容?我知道您可以將靜態上下文變量發送到所包含的段,但是它需要更加動態。我的代碼:在header.html中<html>    <head>        <script url="..."></script>        <link rel="..." />        {% block head_extension %}        {% endblock %}    </head>    <body>        <header>            <div class="headerstuff">            </div>        </header>然后在body.html文件中:        <div class="container">            {% block content %}                Foo fum my content                {% endblock %}        </div>footer.html:        <footer>            {% block footer %}                Copyright 2015            {% endblock %}        </footer>    </body></html>base.html:{% include "header.html" %}{% include "body.html" %}{% include "footer.html" %}<!-- and the part that doesn't work -->{% block head_extension %}    <script src="unique_script"></script>{% endblock %}{% block content %}    My unique content{% endblock %}{% block footer %}    Copyright 2011{% endblock %}<!-- end broken django templating try -->難道我做錯了什么?模板文檔似乎表明我嘗試執行的操作不起作用。看來這將是創建易于閱讀的模板的最佳方法。將所有部分都放在一個大文件中會更好嗎?您可以想象,頁眉,正文和頁腳元素比此示例要大得多。但是重點仍然存在。我希望有一種方法可以做我不知道的事情。
查看完整描述

1 回答

?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

您的方法很好,但是您執行的順序錯誤。首先,不應將html的開始<html>和結束標記</html>拆分為不同的文件,最好將其放入base.html。


以下是如何遵循分手結構的示例:


base.html


<html>

    <head>

        <!-- Some stuff here which should be included in all templates for example js or css -->

        {% block extra_css %}

            <!-- to included app-template dependent css -->

        {% endblock extra_css %}


        {% block extra_js %}

            <!-- to included app-template dependent js -->

        {% endblock extra_js %}


        {% block extra_head %}

            <!-- for anything else inside head -->

        {% endblock extra_head %}


    </head>

    <body>

        {% block menu %}

            <!-- Default menu here -->

            {% block extra_menu %}

                <!-- extend menu based on template -->

            {% endblock extra_menu %}

        {% endblock menu %}


        {% block content %}

            <div>This is good</div>

        {% endblock content %}


        {% include "footer.html" %}


        {% block bottom_js %}

            <!-- if you want to have manual js scripts at bottom -->

        {% endblock bottom_js %}

    </body>

</html>

現在base.html是所有設置,現在讓我們假設您想覆蓋另一個要覆蓋的base.html塊的子模板content:


child.html


{% extends "base.html" %}


{% block content %}

    <div>This is really good</div>

{% endblock content %}

因此,在加載頁面時,您會看到this is really good而不是this is good(它在content塊內的base.html中定義),因為您只是覆蓋了它。


如果您希望base.html保留內容塊中的所有內容,則需要擴展該塊,而不是通過使用方法{{block.super}}來完全覆蓋它


child.html


{% extends "base.html" %}


{% block content %}

    {{ block.super }}

    <div>This is really good</div>

{% endblock content %}

現在,您將同時看到this is good和this is really good。希望這可以澄清您的概念并為您帶來好處。


查看完整回答
反對 回復 2021-03-23
  • 1 回答
  • 0 關注
  • 261 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號