在另一个应用程序中使用另一个django应用程序的模板

时间:2017-10-12 07:09:55

标签: python django templates

我有两个django应用程序。一个属于核心代码和一个贡献应用程序。我需要做的是在我的contrib应用程序中显示一个模板,该模板实际上已存在于核心应用程序中。这或多或少是文件夹结构:

  • django项目
    • 核心应用
      • 模板 ...
    • contrib app
      • 模板 -template_from_core_app

模板呈现核心应用程序中存在的视图和表单中的数据。我想知道做这样的事情的最佳方法是什么。

2 个答案:

答案 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()接受一个列表并依次尝试每个模板路径,返回第一个存在的路径。