如何在Django中包含来自另一个应用程序的动态模板?

时间:2009-07-11 20:53:55

标签: django django-templates

我目前有两个应用程序:

app1/
app2/
templates/
    app1.html
    app2.html

在app1.html中,我包括app2.html:

<!-- app1.html -->
{% include "app2.html" %}

app2有一些动态内容:

<!-- app2.html -->
{% app2_value %}

当我显示app1.html时,值app2_value未显示。在Django中处理上述内容的最佳方法是什么?

3 个答案:

答案 0 :(得分:2)

Django并不像PHP或其他语言那样真正处理动态。相反,你应该有一个基本模板,并使用模板继承和块来完成你想要做的事情。

所以你的app2.html会有相同的动态内容,但是有一个地方可以让app1.html覆盖或插入内容。

app2.html:

{% block 'title' %}
{{ app2.title }}
{% endblock %}

{% block 'content' %}
{% endblock %}

然后App1的模板可以扩展App2:

app1.html:

{% extends "app2.html" %}

{% block 'title' %}
Actually App 1!
{% endblock %}

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

不幸的是,包含处理在Django中仍然是新的,并且反对我在文档和社区中看到的最佳实践。

答案 1 :(得分:0)

在Django中,您的视图和模板彼此分离,因此当您在模板中使用{%app2_value%}时,它将假定从调用视图传递给它。

因此,要回答您的问题,要显示该值,请将其传递给用于调用它的任何视图中的app1模板:

# app1 views.py
from django.shortcuts import render_to_response
import app2

def app1_view(request):
    return render_to_response('app1.html', {'app2_value': app2.somevalue})

答案 2 :(得分:0)

您实际上可以将一个镜腿渲染为一个字符串,然后将其发送到另一个模板进行显示。您仍然需要将变量标签发送到您要作为字符串的模板。一个好的用例是使用相同的模板以特殊的方式呈现列表或dicts。