gpt4 book ai didi

django - 在 django-apps 中查找静态文件和模板的顺序

转载 作者:行者123 更新时间:2023-12-03 20:36:46 25 4
gpt4 key购买 nike

例如,我的 django 项目中有 2 个应用程序,其中包含具有相同子路径的模板和静态文件:

app1 / 
static /
style.css
templates /
index.html
app2 /
static /
style.css
templates /
index.html

比,在 settings.py 我添加了这两个应用程序:
INSTALLED_APPS = (
'app1',
'app2',
)

现在我以某种方式在模板中使用“style.css”和“index.html”,例如
{% include 'index.html' %}

所以,问题是:

Django 是否保证当我引用 'style.css' 或 'index.html' 时将使用 app2 子目录中的文件?

在这种情况下,还有其他方法可以指出 Django 更喜欢的文件变体吗?

最佳答案

根据文档,第一场比赛获胜:

Duplicate file names are by default resolved in a similar way to how template resolution works: the file that is first found in one of the specified locations will be used.



https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#django-admin-collectstatic

现在,当您告诉 Django 收集静态文件或渲染模板时,Django 会询问特殊的“查找器”,以便在您的配置中为指定资源定义它们。

静态文件的默认顺序是搜索 STATICFILES_DIRS 的“FileSystemFinder”为了将它们添加到其中。如果 FileSystemFinder 无法在这些目录中找到文件,Django 将使用下一个查找器集,即在您的应用程序目录中的“静态”子目录中搜索的“AppDirectoriesFinder”。

相同的机制适用于模板。当您告诉 Django 渲染“index.html”时,它首先要求“filesystem.Loader”在 TEMPLATE_DIRS 中定义的目录中查找名称类似的模板。 .如果搜索失败,Django 会询问下一个模板加载器“app_directories.Loader”,它会在应用程序"template"子目录中搜索模板目录。

为了回答你的问题,因为 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

关于django - 在 django-apps 中查找静态文件和模板的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21020472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com