You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加Django CSP后Django-Smart-Selects失效的解决咨询

解决Django-Smart-Selects联动失效(CSP中间件导致)

以下是针对CSP配置引发联动功能失效的具体修复方案:

1. 调整CSP的script-src规则

Django-Smart-Selects依赖内联JavaScript触发AJAX联动,同时需要加载自身静态JS文件,需在CSP配置中放开相关权限:

  • 生产环境推荐:使用nonce
    在Settings.py的CSP配置中,为script-src添加'nonce-{{ request.csp_nonce }}'和'self':
    CSP_DEFAULT_SRC = ("'self'",)
    CSP_SCRIPT_SRC = ("'self'", "'nonce-{{ request.csp_nonce }}'")
    
    同时确保模板加载django-smart-selects的JS时带上nonce属性:
    <script nonce="{{ request.csp_nonce }}" src="{% static 'smart-selects/js/chained.js' %}"></script>
    
  • 开发环境临时方案:允许unsafe-inline(不建议生产环境使用)
    CSP_SCRIPT_SRC = ("'self'", "'unsafe-inline'")
    

2. 允许AJAX请求的连接源

联动功能需要通过AJAX请求后端接口获取筛选后的Plant数据,需在CSP的connect-src中允许当前域名:

CSP_CONNECT_SRC = ("'self'",)

3. 验证静态资源加载权限

确保CSP的style-src等规则不会影响django-smart-selects的样式加载,必要时添加'self':

CSP_STYLE_SRC = ("'self'",)

4. 调试排查

  • 打开浏览器开发者工具(F12),在Console标签查看CSP相关报错,根据提示调整对应规则。
  • 切换到Network标签,确认AJAX请求是否被拦截,若拦截则针对性调整connect-src或script-src配置。

内容的提问来源于stack exchange,提问作者GM02

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 08:02:04