在Django中获取另一个应用程序的模板

4
这是我的网站结构:
mysite
    app_a
       templates
           a.html
    app_b
       templates
           b.html
       views.py

views.py中,我想要获取a.html,因此我使用以下代码:
return render_to_response('app_a/a.html')

但它显示了一个错误:
TemplateDoesNotExist 

我需要做什么?

3个回答

6

只需使用render_to_response('a.html')

假设您在默认应用程序目录中使用模板加载程序,则问题在于模板路径实际上是a.html

因此,在当前格式中,您将编写a.html而不是app_a/a.html

模板目录的推荐格式为

mysite
    app_a
       templates
           app_a
               a.html
    app_b
       templates
           app_b
               b.html
       views.py

    global_templates
       app_b
            b.html

这种格式建议使用,是为了您可以合理地按应用程序覆盖模板。

如果所有文件都直接放在应用程序模板目录中,很容易出现冲突的模板名称。

这将适用于您的示例 app_a/a.html


1

您可以在settings.py中指定TEMPLATE_DIRS变量,它是一个目录元组,用于搜索模板。如果将两个应用程序的模板目录添加到TEMPLATE_DIRS中,那么就可以正常使用(只需注意搜索路径中的冲突即可)。


例如,我的模板/目录位于顶层(即在所有应用程序之间共享)。在settings.py中,我这样指示模板的位置:TEMPLATE_DIRS =(os.path.join(os.path.dirname(__file__),'templates'),)...如果我想要将更多的模板目录添加到搜索路径中,我会在逗号后附加其他路径。希望这可以帮助! - Madison Caldwell

1
除了TEMPLATE_DIRS设置之外,尝试将django.template.loaders.app_directories.Loader添加到TEMPLATE_LOADERS设置中,这将使您的INSTALLED_APPS中的所有应用程序模板都可用。这样,您就不需要将它们全部放在一个主目录下。
请参阅Django模板加载器文档

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接