在另一个应用程序中使用另一个Django应用程序的模板
问题描述:
我有两个Django应用程序。一个属于核心代码和一个贡献应用程序。我需要做的是在我的contrib应用程序中显示一个模板,该模板实际上已经存在于核心应用程序中。这是多还是少的文件夹结构:在另一个应用程序中使用另一个Django应用程序的模板
- Django项目
- 核心应用
- 模板 ...
- 的contrib应用
- 模板 - template_fro m_core_app
- 核心应用
模板呈现从视图和表单存在于核心应用数据。我想知道做这种事情的最佳方式是什么。
答
给你使用render()的快捷方式在contrib.views,你只需从核心应用程序加载模板,并确保上下文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))
推荐阅读:
渲染():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()接受一个列表,并依次尝试每个模板路径,返回确实存在的第一个模板路径。
这里不应该有任何问题:除了在文件目录中,模板不以任何方式“属于”应用程序。 –