Django多app同名模版引⽤
当存在多个app的时候,恰好还有同名模版怎么办,先给⽅法,再讲原理
⼀.步骤
1.确定新增的这个app在seetings.py的INSTALLED_APPS⾥⾯已经注册好了
2.确定seeting.py⾥⾯的TEMPLATES中的APP_DIRS设置为True
3.在app下新建⽂件夹templates,在templates⾥⾯建⽴app同名⽂件夹,再放⼊html模版
4.引⽤模版的时候,采⽤”appname/index.html” 这种⽅式即可
⼆.原理
我⽤的是Django1.8版本
Django模板载⼊有两种模式:
1. plate.loaders.filesystem.Loader 它会遍历所有app中的templates然后到符合名字的就返回
2. plate.loaders.app_directories.Loader 它会从app对应的templates⽬录中查要渲染的模板⽂件,即使不到也不去其
他app⾥⾯
通识:通常在APP各⾃的templates⽬录中保存APP特定的模板,并不直接在APP对应templates⽬录中直接存放模板⽂件本⾝,⽽是在该⽬录中在创建⼀层以APP名称命名的⽬录,⽐如APP名称为sqlreview则存放该APP模板的⽬录为…/sqlreview/templates/sqlreview/,在指定要渲染的模板时可以通过模板⽂件的上⼀层⽬录来限定模板⽂件,以避免混淆,这实际上是提供了⼀个命名空间。⽐如return
render(request, ‘sqlreview/base.html’,context),可以在/var/www/site/mycitsm/sqlreview/templates⽬录中到该模板。这样便不⽤担⼼Django载⼊的模板究竟是不是对的、需要的那个模板。
Django1.8中 进⾏如下设置
TEMPLATES = [
{
'BACKEND': 'plate.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
't_processors.debug',
'quest',
'dia',
't_processors.auth',
'ssages',
],app模板网站
},
},
]
APP_DIRS的值设置为TRUE,表⽰启⽤plate.loaders.app_directories.Loader,DIRS为空即可.
如果不设置APP_DIRS或者设置为False,则启⽤plate.loaders.filesystem.Loader模式,这个模式需要把DIRS设置好,要不然不到任何模版
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论