python - 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。我将不胜感激对此的一些见解,以便我可以找到解决此问题的方法。
谢谢!
解决方案
我弄清楚了我的问题的原因。我错过了解释 STATICFILES_FINDERS 的 Django 文档中的这一部分:STATICFILES_STORAGE 文档
事实证明,我的生产服务器首先在我的外部根文件夹中查找静态文件,这些文件不是最新的。这解释了为什么我没有看到我的变化。我将重新配置处理静态文件的方式,以确保我的生产服务器看起来的外部根静态文件夹始终通过该collectstatic
功能具有最新的静态文件
推荐阅读
- python - Python/Pandas - Long to Wide/ 或 Pivot 或 Stack/Unstack
- c++ - 使用 msys2/mingw64 在 CLang 中测试协程时出错
- c - Txt 解析为二维数组并转换浮点数
- javascript - 如何通过Angular中数组中的不同对象迭代*ngFor?
- android-studio - 将项目与 Gradle 文件同步时发生的错误“无法执行 org.gradle.cache.internal”是什么?
- android - 使用 Appium 运行移动 UI 测试的正确方法是什么?
- jenkins - Jenkins 工作区文件夹路径以双引号显示,并且 html-publisher 插件无法检测到 allure-report 文件夹
- jquery - jquery悬停不恢复'mouseleave'
- bluetooth - ESP32 上的 Micropython 和蓝牙
- docker - 在 docker 镜像中创建 esxi 服务器