在Django中获取另一个应用的模板
这是我网站的结构:
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
示例一起使用
推荐这种格式的原因是,你可以在每个应用中合理地覆盖模板。
如果所有文件都直接放在应用的模板目录中,可能会导致模板名称冲突。