yiv*_*ivi 5 python django templates
根据Django Docs,模板加载器将
从文件系统上的 Django 应用程序加载模板。对于 INSTALLED_APPS 中的每个应用程序,加载程序都会查找 templates 子目录。
正在进行:
...然后 get_template('foo.html') 将按以下顺序在这些目录中查找 foo.html:
/path/to/myproject/polls/templates/
/path/to/myproject/music/templates/
Run Code Online (Sandbox Code Playgroud)
所以......在我的“网站”项目中,我有一个“ www ”应用程序。所以目录结构是/path/to/project/website/www/
我在“ www ”内创建了一个“ templates ”目录,并将其放在“ page_list.html ”(/path/to/project/website/www/page_list.html)
该应用程序列在“INSTALLED_APPS”内,但是当我尝试在 urls.py 中执行此操作时:
url('^$', ListView.as_view(model=Page,))
Run Code Online (Sandbox Code Playgroud)
我得到“ TemplateDoesNotExist ”,并且错误表明django.template.loaders.app_directories.Loader正在寻找“ /path/to/project/website/templates/www/page_list.html ” 或/path/to/project/website /www/templates/www/page_list.html
如果我将模板放在website/www/templates/www中,它就可以工作......但我想知道为什么它会这样工作。在应用程序文件夹内有一个模板文件夹,然后在模板目录内有另一个名为应用程序的文件夹,这似乎很荒谬......
文档说它应该查看项目/应用程序/模板的内部......我确实有
TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'templates')]
Run Code Online (Sandbox Code Playgroud)
尽管 app_directories.Loader 的文档没有说您需要它(并且还尝试删除该选项)。
这是怎么回事?我做错了什么吗?是关于一般观点的问题,还是还有其他事情正在发生?
您的问题是 Django 基于通用类的视图的自动模板命名。如果您使用,django.views.generic.ListView
您将获得MultipleObjectTemplateResponseMixin来创建您的模板名称www/poll_list.html
。该名称与app_directory Loader生成的前缀相结合,因此您得到了/path/to/project/app/templates/www/poll_list.html
.
如果您不想这样做,您有不同的选择(按此顺序):