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
相关产品推荐
相关产品推荐

