例如,我的django项目中有2个应用程序,模板和具有相同子路径的静态文件:
app1 /
static /
style.css
templates /
index.html
app2 /
static /
style.css
templates /
index.html
Run Code Online (Sandbox Code Playgroud)
比在settings.py中我添加了这两个应用:
INSTALLED_APPS = (
'app1',
'app2',
)
Run Code Online (Sandbox Code Playgroud)
现在我在模板中以某种方式使用'style.css'和'index.html',例如
{% include 'index.html' %}
Run Code Online (Sandbox Code Playgroud)
所以,问题是:
Django是否保证当我引用'style.css'或'index.html'时会使用来自app2子目录的文件?
在这种情况下,是否有任何其他方式指出Django文件的优选变体?
根据文档,第一场比赛获胜:
默认情况下,重复文件名的解析方式与模板解析的工作方式类似:将首先使用在其中一个指定位置找到的文件.
https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#django-admin-collectstatic
现在,当你告诉Django收集静态文件或渲染模板时,Django会询问特殊的"finders",以便在你的configuraiton中为指定的资源定义它们.
静态文件的默认顺序是"FileSystemFinder",它STATICFILES_DIRS按顺序搜索它们.如果FileSystemFinder无法在这些目录中找到文件,Django会使用下一个查找程序集,即"AppDirectoriesFinder",它会搜索应用程序目录中的"静态"子目录.
相同的机制应用于模板.当你告诉Django呈现"index.html"时,它首先要求"filesystem.Loader"找到在其中定义的目录中命名的模板TEMPLATE_DIRS.如果搜索失败,Django会询问下一个模板加载器"app_directories.Loader",它在应用程序"templates"子目录中搜索模板目录.
要回答你的问题,因为app1在app2之前注册,Django将使用它的style.css和index.html而不是来自app2的那些.如果要更改此行为,请将app2放在已安装的应用程序设置中的app1上方.
文档:https: //docs.djangoproject.com/en/dev/ref/templates/api/#django.template.loaders.app_directories.Loader
| 归档时间: |
|
| 查看次数: |
1858 次 |
| 最近记录: |