【发布时间】:2012-06-14 16:52:33
【问题描述】:
我有一个非常基本的模板 (basic_template.html),并想用另一个部分模板格式化的数据来填写。 basic_template.html 可能包含一些使用部分模板格式化的内容。
我应该如何构建views.py中的代码?
我这样做的原因是稍后将使用 Ajax 填充。我这样做对吗?
【问题讨论】:
标签: html django django-templates
我有一个非常基本的模板 (basic_template.html),并想用另一个部分模板格式化的数据来填写。 basic_template.html 可能包含一些使用部分模板格式化的内容。
我应该如何构建views.py中的代码?
我这样做的原因是稍后将使用 Ajax 填充。我这样做对吗?
【问题讨论】:
标签: html django django-templates
你可以这样做:
<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>
【讨论】:
{% include "includes/subtemplate.html" with item=item %}吗?
item 已经在子模板中可用。如果您希望保持子模板的上下文干净,则可以使用 {% include "includes/subtemplate.html" with item=item only %} 仅将 item 从父模板传递给子模板。
您可以使用 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" %} 方法看起来更简单(它确认 KISS)。
主要有2种方法(2种简单的)
1:
在基本 html 中放置 {% 包括 "myapp/sub.html" %}
只需在您的 sub.html 文件中编写 html 代码
2:
https://docs.djangoproject.com/en/dev/ref/templates/language/#template-inheritance
【讨论】:
我只是想添加扩展和包含的差异。 模板和包含都可以使用当前应用程序中插入的模型。 模板供您的任何应用程序在全球范围内使用。包括用于某些应用程序。 例如:您想将图像滑块插入您的主页和关于页面,但没有其他地方。为方便起见,您可以使用自己的模型创建 Slider 应用程序,并导入其模型并包含在该页面中。 如果您在此示例中使用模板,您将创建 2 个模板,其中一个带有滑块,其他模板具有其他所有模板。
【讨论】: