我无法理解Django如何处理静态文件。我已经阅读了Django的官方文档以及多个线程,包括此处的精彩文章:
Differences between STATICFILES_DIR, STATIC_ROOT and MEDIA_ROOT
大多数人将STATICFILES_DIRS列表定义为django将在其中搜索除应用程序的静态文件夹之外的其他静态文件的路径列表。
我理解这一点,但这与我在admin.py中覆盖的formfield有什么关系? 我已经在一些管理模型中将默认的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。我希望对此有所了解,以便找到解决此问题的方法。
谢谢!
答案 0 :(得分:0)
我找出了问题的原因。我错过了Django文档中解释STATICFILES_FINDERS的这一部分:STATICFILES_STORAGE Documentation
事实证明,我的生产服务器首先在外部根文件夹中找到了静态文件,这些文件不是最新的。这解释了为什么我没有看到自己的更改。我将重新配置处理静态文件的方式,以确保通过collectstatic
功能,我的生产服务器看起来的外部根静态文件夹始终具有最新的静态文件