Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在另一个应用程序中使用另一个django应用程序的模板_Python_Django_Templates - Fatal编程技术网

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

Python 在另一个应用程序中使用另一个django应用程序的模板,python,django,templates,Python,Django,Templates,我有两个django应用程序。一个属于核心代码,一个contrib应用程序。我需要做的是在我的contrib应用程序中显示一个模板,它实际上已经存在于核心应用程序中。这或多或少是文件夹结构: django项目 核心应用程序 模板 contrib应用程序 模板 -来自核心应用程序的模板 该模板呈现核心应用程序中存在的视图和表单中的数据。我想知道做这样的事情最好的方法是什么 是的,您可以通过使用include core_app/ templates/ cor

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

  • django项目
    • 核心应用程序
      • 模板
    • contrib应用程序
      • 模板 -来自核心应用程序的模板

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

是的,您可以通过使用
include

core_app/
    templates/
        core_app/
            page1.html
contrib_app/
    templates/
        contrib_app/
            page1.html
            page2.html
{%include“core_app/page1.html”%}或{%include“contrib_app/page1.html”%}

您也可以参考本文档

如果您在contrib.views中使用render()快捷方式,您只需从core应用程序加载模板,并确保上下文变量满足core模板呈现的内容。如果提供类似“coreapp/template.html”的路径,则get_context()模板加载程序后端将找到正确的模板,前提是该模板设置正确:

settings.py: 在
模板
字典中设置
APP\u DIRS=True
。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():

模板加载:


注意:您还可以将回退模板与select_template()一起使用,而不是与get_template()一起使用。select_template()获取一个列表,然后依次尝试每个模板路径,返回第一个确实存在的路径。

这里不应该有任何问题:模板除了在其文件目录中之外,不以任何方式“属于”应用程序。为了避免名称冲突,这就是为什么在
模板中使用相同名称的原因。