【问题标题】:How do you insert a template into another template?如何将一个模板插入另一个模板?
【发布时间】:2012-06-14 16:52:33
【问题描述】:

我有一个非常基本的模板 (basic_template.html),并想用另一个部分模板格式化的数据来填写。 basic_template.html 可能包含一些使用部分模板格式化的内容。

我应该如何构建views.py中的代码?

我这样做的原因是稍后将使用 Ajax 填充。我这样做对吗?

【问题讨论】:

    标签: html django django-templates


    【解决方案1】:

    你可以这样做:

    <div class="basic">
    {% include "main/includes/subtemplate.html" %}    
    </div>
    

    subtemplate.html 是另一个 Django 模板。在这个subtemplate.html 中,您可以放置​​使用 Ajax 获得的 HTML。

    您还可以多次包含该模板:

    <div class="basic">
    {% for item in items %}
        {% include "main/includes/subtemplate.html" %}    
    {% endfor %}
    </div>
    

    【讨论】:

    • 抱歉,忘了说:子模板可能会在 basic_template.html 中多次实例化
    • 也可以,可以在模板中的for循环中包含模板,查看更新答案。
    • 在项目循环中,我不应该在子模板上下文中传递项目,如{% include "includes/subtemplate.html" with item=item %}吗?
    • @barraponto 你可以这样做,但item 已经在子模板中可用。如果您希望保持子模板的上下文干净,则可以使用 {% include "includes/subtemplate.html" with item=item only %} 仅将 item 从父模板传递给子模板。
    • 这应该被添加到 Django 文档的某个地方!感谢您提供有用的答案。
    【解决方案2】:

    您可以使用 block 来做到这一点。 Blocks 是一个 Django 模板标签,它将覆盖您 扩展的模板部分。我在下面提供了一个示例。

    basic_template.html

    <body>
    {% block 'body' %}
    {% endblock %}
    </body>
    

    您要包含的模板:(即 example.html)

    {% extends 'basic_template.html' %} 
    {% block 'body' %}
    /* HTML goes here */
    {% endblock %}
    

    views.py

    return render_to_response(template='example.html', context, context_instance)
    

    这样做会加载 basic_template.html,但会将 basic_template.html 中 {% block 'body' %} {% endblock %} 中的所有内容替换为 {% block 'body' %} {% endblock %} 中包含的所有内容。

    您可以在Django Docs 中阅读有关块和模板继承的更多信息

    【讨论】:

    • 这样做和做 {% include "main/includes/example.html" %} 有什么区别?
    • @MichaelLafayette,将扩展视为继承,而将包含视为导入。
    • 使用一种方法相对于另一种方法是否有任何性能优势? {% include "main/includes/example.html" %} 方法看起来更简单(它确认 KISS)。
    【解决方案3】:

    主要有2种方法(2种简单的)

    1:

    在基本 html 中放置 {% 包括 "myapp/sub.html" %}

    只需在您的 sub.html 文件中编写 html 代码

    2:

    https://docs.djangoproject.com/en/dev/ref/templates/language/#template-inheritance

    【讨论】:

      【解决方案4】:

      我只是想添加扩展和包含的差异。 模板和包含都可以使用当前应用程序中插入的模型。 模板供您的任何应用程序在全球范围内使用。包括用于某些应用程序。 例如:您想将图像滑块插入您的主页和关于页面,但没有其他地方。为方便起见,您可以使用自己的模型创建 Slider 应用程序,并导入其模型并包含在该页面中。 如果您在此示例中使用模板,您将创建 2 个模板,其中一个带有滑块,其他模板具有其他所有模板。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-09-12
        • 1970-01-01
        • 2014-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多