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

时间:2010-12-23 01:09:42

标签: python django templates

这是我网站的结构:

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 个答案:

答案 0 :(得分:6)

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

假设你有默认的app目录模板加载器,问题是模板路径实际上是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 :(得分:1)

您可以在settings.py中指定TEMPLATE_DIRS变量,该变量是搜索模板的目录元组。如果您将两个应用程序的模板目录添加到TEMPLATE_DIRS,您应该没问题(只需注意搜索路径中的冲突)。

答案 2 :(得分:1)

TEMPLATE_DIRS设置外,请尝试将django.template.loaders.app_directories.Loader添加到TEMPLATE_LOADERS设置,因为这会为INSTALLED_APPS中的应用提供所有模板。这样您就不需要将它们全部放在一个主目录下。

请参阅Django Documentation for template loaders