我无法理解 Django 中如何处理静态文件。我已经通读了 Django 官方文档以及多个线程,包括这里的这个精彩的文档:
Differences between STATICFILES_DIR, STATIC_ROOT and MEDIA_ROOT
大多数人将 STATICFILES_DIRS 列表定义为路径列表,django 将在其中搜索除应用程序的静态文件夹之外的其他静态文件。
我明白这一点,但这与我在 admin.py 中覆盖的表单字段有什么关系? 我已经在我的一些管理模型中将默认的 ManyToMany 表单覆盖为 FilteredSelectMultiple 小部件,如下所示:
from django.contrib.admin.widgets import FilteredSelectMultiple
formfield_overrides = {
models.ManyToManyField: {'widget': FilteredSelectMultiple("User Names", is_stacked=False)}
}
这工作正常并产生我想要的小部件覆盖:Functional Widget Screenshot
但是,当我在 settings.py 中定义 STATICFILES_DIRS 以包含我的根静态文件夹时,如下所示:
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static/'),
)
它破坏了我的覆盖并默认返回原始的 ManyToMany 字段形式: Broken Widget Screenshot
我们没有在 settings.py 中定义 STATIC_ROOT,因为我们不打算使用收集静态功能。我们计划在根静态文件夹中保留/引用我们的静态文件。另外,在我们的 settings.py 中,我们有:
STATIC_URL = '/static/'
我不明白这些处理静态文件的设置如何干扰上面的 formfield_override 。我希望对此有一些见解,以便我能找到解决此问题的方法。
谢谢!
最佳答案
我找到了问题的原因。我错过了 Django 文档中解释 STATICFILES_FINDERS 的这一部分:STATICFILES_STORAGE Documentation
事实证明,我的生产服务器首先在我的外部根文件夹中查找静态文件,这些文件不是最新的。这解释了为什么我没有看到我的变化。我将重新配置处理静态文件的方式,以确保我的生产服务器看起来的外部根静态文件夹始终通过 collectstatic
功能
关于python - STATICFILES_DIRS 设置使我的管理小部件覆盖消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58825381/