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

Django模板中使用if语句检测NULL值的问题

问题及解决方案

问题背景

Web应用存储舞蹈信息与对应YouTube链接,需用表格展示舞蹈名称和视频跳转链接。部分舞蹈无视频,数据库返回video_id为NULL,但模板中的空值判断写法均失效或报错。

相关代码

Model

class Dances(models.Model):
    name = models.CharField('name', max_length=120)
    video_id = models.CharField('video_id', max_length=50)
    level = models.CharField('level', max_length=3)
    
    def __str__(self):
        return str(self.name)

View

def video_test(request, id, name):
    vid_id= id
    d_name = name
    return render(request, 'alineapp/video_test.html',{'vid_id':vid_id, 'd_name':d_name})

原Template(存在错误)

<!--  Table for Beginner dances -->
    <table border="1" cellspacing="2" cellpadding="2">                       
    {% for i in beg_list %}
    <tr>                           
    <td>{{ i.name }}</td>
    {% If i.video !== NULL %}
    <td><a  href="{% url 'video_test'   i.video_id i.name %}">Video</a></td>
    {% else %} 
    <td> None  </td>   
    {% endif %}     
    </tr>
    {% endfor %}

错误原因及修正方案

  1. 字段引用错误:模板中写的i.video是不存在的字段,Model里对应的是video_id,需改为i.video_id。
  2. 模板标签语法错误:Django模板标签if必须小写,原代码中的{% If %}会导致解析错误,需改为{% if %}。
  3. 空值判断逻辑错误:
    • Django的CharField默认会把数据库中的NULL存储为空字符串''(除非设置了null=True),所以直接判断字段是否非空即可。
    • 正确的判断写法有两种:
      • 简洁写法:{% if i.video_id %}(非空则显示链接)
      • 明确写法:{% if i.video_id != '' %}

修正后的Template代码

<!--  Table for Beginner dances -->
<table border="1" cellspacing="2" cellpadding="2">                       
{% for i in beg_list %}
<tr>                           
<td>{{ i.name }}</td>
{% if i.video_id %}
<td><a href="{% url 'video_test' i.video_id i.name %}">Video</a></td>
{% else %} 
<td>None</td>   
{% endif %}     
</tr>
{% endfor %}
</table>

额外优化建议

如果需要在数据库中真正存储NULL值,需修改Model的video_id字段,添加null=True, blank=True参数:

video_id = models.CharField('video_id', max_length=50, null=True, blank=True)

此时模板中可以用{% if i.video_id is not None %}来判断非空。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:55:30