python - STATICFILES_DIRS 设置使我的管理小部件覆盖消失

标签 python django django-models django-forms django-admin

我无法理解 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

enter image description here

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

拥有最新的静态文件

关于python - STATICFILES_DIRS 设置使我的管理小部件覆盖消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58825381/

相关文章:

python - 分块迭代,包括生成器

django - django 中的 Q 对象和 '&' 运算符

python - 我可以用 python 列表过滤 django 模型吗?

django - 为什么 Django 中不再推荐永久链接装饰器?

django - 模板中的django slice字符串

Python,使用多进程比不使用它慢

python - 为什么要使用 def main()?

python - MySQL 查询抛出 1064 错误

python - 反转 'edit_post',参数为 '(' ', )' not found. 1 pattern(s) tried: [' edit_post/(?P<post_id>\\d+)/$']

javascript - Django jquery ajax 图片上传