django使用通用视图_模板载入顺序

模板位置

djproject/templates/jobs
|-- base.html
|-- job_1list.html
`-- job_detail.html
当前urls.py
urlpatterns = patterns('',
    url(r'^$',
        ListView.as_view(
            queryset=Job.objects.order_by('-pub_date')[:3],
            context_object_name='job_list',
            template_name='jobs/job_2list.html')),
    url(r'^(?P<pk>\d+)/$',
        DetailView.as_view(
            model=Job,
            template_name='tjobs/job_detail.html')),
#    url(r'^admin/', admin.site.urls),
    url(r'^admin/', admin.site.urls),

)
访问127.0.0.1:8000,访问的是job_list.html,出错
TemplateDoesNotExist at /

jobs/job_2list.html, jobs/job_list.html

Template-loader postmortem

Django tried loading these templates, in this order:

    Using loader django.template.loaders.filesystem.Loader:
        /home/python/djproject/templates/jobs/job_2list.html, jobs/job_list.html (File does not exist)
    Using loader django.template.loaders.app_directories.Loader:
        /usr/lib/python2.6/site-packages/django/contrib/auth/templates/jobs/job_2list.html, jobs/job_list.html (File does not exist)
        /usr/lib/python2.6/site-packages/django/contrib/admin/templates/jobs/job_2list.html, jobs/job_list.html (File does not exist)
可见查找顺序为/home/python/djproject/templates/jobs/job_2list.html,  jobs/job_list.html
但是127.0.0.1:8000/1/访问正常,尽管urls.py里面设置的是tjobs/job_detail.html
实际访问的是jobs/job_detail.html
----------------------------------------------------------------------

Ref:

By default, the DetailView generic view uses a template called <app name>/<model name>_detail.html. In our case, it'll use the template "polls/poll_detail.html". The template_name argument is used to tell Django to use a specific template name instead of the autogenerated default template name.

https://docs.djangoproject.com/en/dev/intro/tutorial04/

上面的查找顺序是,先查找template_name设置的路径,然后查找默认路径即<app name>/<model name>_list.html和<app name>/<model name>_detail.html,如果能找到template_name设置的路径,如/home/python/djproject/templates/jobs/job_2list.html、/home/python/djproject/templates/jobs/job_2list.html、/home/python/djproject/templates/tjobs/job_detail.html,则使用指定的文件,否则再查找默认的路径,如果能找到则使用默认路径指向的文件即jobs/job_list.html和jobs/job_detail.html,如果再查找失败,则报上述错误。

模板载入器

https://docs.djangoproject.com/en/dev/ref/templates/api/#template-loaders

摘录:

By default, Django uses a filesystem-based template loader, but Django comeswith a few other template loaders, which know how to load templates from othersources.

Some of these other loaders are disabled by default, but you can activate themby editing yourTEMPLATE_LOADERS setting.TEMPLATE_LOADERSshould be a tuple of strings, where each string represents a template loaderclass. Here are the template loaders that come with Django:

django.template.loaders.filesystem.Loader
Loads templates from the filesystem, according to TEMPLATE_DIRS.This loader is enabled by default.
django.template.loaders.app_directories.Loader

Loads templates from Django apps on the filesystem. For each app inINSTALLED_APPS, the loader looks for a templatessubdirectory. If the directory exists, Django looks for templates in there.

This means you can store templates with your individual apps. This alsomakes it easy to distribute Django apps with default templates.

更多 详见


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值