我目前有两个应用程序:
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中处理上述内容的最佳方法是什么?
答案 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。