首页 > 解决方案 > STATICFILES_DIRS 设置使我的管理小部件覆盖消失

问题描述

我无法理解 Django 中如何处理静态文件。我已经阅读了官方的 Django 文档以及多个线程,包括这里精彩的一个:

STATICFILES_DIR、STATIC_ROOT 和 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。我将不胜感激对此的一些见解,以便我可以找到解决此问题的方法。

谢谢!

标签: pythondjangodjango-modelsdjango-formsdjango-admin

解决方案


我弄清楚了我的问题的原因。我错过了解释 STATICFILES_FINDERS 的 Django 文档中的这一部分:STATICFILES_STORAGE 文档

在此处输入图像描述

事实证明,我的生产服务器首先在我的外部根文件夹中查找静态文件,这些文件不是最新的。这解释了为什么我没有看到我的变化。我将重新配置处理静态文件的方式,以确保我的生产服务器看起来的外部根静态文件夹始终通过该collectstatic功能具有最新的静态文件


推荐阅读