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

Django模板渲染报错:SQL表小数用点后台显示逗号致类型错误

问题排查与解决

核心错误点

你的settings.py中DECIMAL_SEPARATOR = True是错误配置——这个参数需要是字符串类型,布尔值会导致Django的小数本地化处理逻辑异常,这是引发模板渲染错误的直接原因。

结合你的LANGUAGE_CODE = "fr-fr"(法语区默认用逗号作为小数分隔符),错误配置会让Django在处理DecimalField时出现格式混乱:Admin后台显示时用了逗号,但模板渲染时如果直接将字段值当作数值使用(比如传给地图组件、做数学计算),带逗号的字符串无法被识别为合法的int/float,从而触发argument must be int or float错误。

分步解决

1. 修正配置文件

修改settings.py中的相关配置:

LANGUAGE_CODE = "fr-fr"
TIME_ZONE = "UTC"
USE_I18N = True
USE_L10N = True  # 启用本地化处理,自动适配语言区的数字格式
USE_TZ = True

# 法语区明确指定逗号为小数分隔符,不设置的话Django也会根据语言自动适配
DECIMAL_SEPARATOR = ','

2. 模板渲染区分场景

根据不同使用场景,在模板中对latitude/longitude做对应处理:

  • 仅用于显示:使用本地化过滤器localize,自动适配法语区的逗号格式:
    {{ ville_station.latitude|localize }}
    {{ ville_station.longitude|localize }}
    
  • 需要数值类型的场景(比如传给JavaScript地图API、进行数值计算):强制使用点作为分隔符,避免格式冲突:
    {{ ville_station.latitude|stringformat:"f"|slice:":-3" }}  # 匹配DecimalField的6位小数设置
    {{ ville_station.longitude|stringformat:"f"|slice:":-3" }}
    
    或者用floatformat直接转为浮点数字符串:
    {{ ville_station.latitude|floatformat:6 }}
    {{ ville_station.longitude|floatformat:6 }}
    

3. 验证效果

重启Django服务后,检查Admin后台坐标字段显示是否正常(仍为逗号分隔),同时测试模板渲染:显示场景用逗号,数值场景用点,确保不再触发argument must be int or float错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:02:02