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

4 投票
3 回答
2706 浏览
提问于 2025-04-16 08:56

这是我网站的结构:

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 个回答

1

除了设置 TEMPLATE_DIRS 之外,试着在 TEMPLATE_LOADERS 设置中添加 django.template.loaders.app_directories.Loader。这样做可以让你在 INSTALLED_APPS 中的所有应用程序的模板都能被使用。这样你就不需要把所有模板放在一个主目录下了。

可以查看 Django文档关于模板加载器的介绍

1

你可以在settings.py文件里设置一个叫做TEMPLATE_DIRS的变量,这个变量是一个包含多个目录的元组,用来告诉系统在哪里找模板。如果你把两个应用的模板目录都加到TEMPLATE_DIRS里,应该就没问题了(不过要注意搜索路径中可能会有冲突)。

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 示例一起使用

推荐这种格式的原因是,你可以在每个应用中合理地覆盖模板。

如果所有文件都直接放在应用的模板目录中,可能会导致模板名称冲突。

撰写回答