我有两个django应用程序。一个属于核心代码和一个贡献应用程序。我需要做的是在我的contrib应用程序中显示一个模板,该模板实际上已存在于核心应用程序中。这或多或少是文件夹结构:
模板呈现核心应用程序中存在的视图和表单中的数据。我想知道做这样的事情的最佳方法是什么。
答案 0 :(得分:1)
是的,你可以使用include
core_app/
templates/
core_app/
page1.html
contrib_app/
templates/
contrib_app/
page1.html
page2.html
{% include "core_app/page1.html" %} or {% include "contrib_app/page1.html" %}
您也可以参考此文档Template
答案 1 :(得分:1)
鉴于您在contrib.views中使用render()快捷方式,您只需从核心应用程序加载模板,并确保上下文var满足核心模板呈现的内容。如果您提供类似" coreapp / template.html"的路径get_context()模板加载器后端将找到正确设置的正确模板:
settings.py:
在APP_DIRS=True
词典中设置TEMPLATE
。 Django将通过get_template()和select_template()函数在每个应用程序中查找模板。
contrib.views.py
from django.http import HttpResponse
from django.template import loader
def index(request):
...
template = loader.get_template('coreapp/template.html')
context = {
'core_template_var': core_template_var,
...
}
return HttpResponse(template.render(context, request))
推荐读物:
render():https://docs.djangoproject.com/en/1.11/topics/http/shortcuts/#render
模板加载:https://docs.djangoproject.com/en/1.11/topics/templates/#template-loading
注意:您还可以使用带有select_template()而不是get_template()的后备模板。 select_template()接受一个列表并依次尝试每个模板路径,返回第一个存在的路径。