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

Django模板中PostgreSQL JSON字段元素的if语句判断问题

Django模板中JSON字段值判断失效问题

模型定义

from django.db.models import JSONField

class Widget(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    endpoint = models.CharField(max_length=512)  # "/data/id"
    type = models.CharField(max_length=64, default="line-graph")
    settings = JSONField(default=dict)

数据插入代码

widget, created = Widget.objects.get_or_create(
    user=request.user,
    endpoint=endpoint,
)
widget.type = type_
widget.settings = {
    "code": "",
    "dashboard": dashboard.id,
    "position": "top",
    "params": "per=m&len=1"
}

模板判断问题

直接使用以下代码时条件无法通过:

{% if widget.setttings.position == "top" %}

但通过{% with %}先赋值再判断则正常生效:

{% with widget.settings.position as pos %}
    {% if pos == "top" %}

版本信息

  • Django版本:3.2
  • Python版本:3.8
  • PostgreSQL版本:12.10

问题原因及解决

你犯了一个拼写错误:模板里的widget.setttings.position多写了一个t,正确的字段名是settings(两个t),应该写成widget.settings.position == "top"。

Django模板对变量名拼写严格敏感,引用不存在的变量会返回空值,导致条件判断不成立。而使用{% with %}时你写对了widget.settings.position,所以能正常获取值并完成判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:23:14