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

