如何将Django模板渲染HTML表格时的None值替换为空白显示
解决方案
你可以直接使用Django模板内置的default过滤器处理空值,这个过滤器会自动将None、空字符串等布尔值为假的内容替换为你指定的默认值,这里我们指定默认值为空字符串即可。
方法1:直接修改模板代码(最便捷)
将所有可能返回空值的变量后添加|default:""后缀,修改后的模板代码如下:
<table> <tr> <th>S/N</th> <th>Course Material Title</th> <th>Author/Editor</th> <th>Publication Year</th> <th>Edition</th> <th>Special Edition</th> <th>iSBN or e-iSBN / VBID</th> <th>Cost</th> <th>Material Format</th> <th>Distribution Mode</th> </tr> {% for query_results_book in query_results_books_list %} <tr> <td>{{ forloop.counter }}</td> {% for obj in query_results_book %} {% if obj.title == "StudyGuide" or obj.title == "Mylab" %} <td>{{ obj.title|default:"" }}</td> {% else %} <td>{{obj.title|default:""}}</td> {% endif %} <td>{{obj.author|default:""}}</td> <td>{{obj.pub_date|default:""}}</td> <td>{{obj.edition|default:""}}</td> <td>{{obj.special_edition|default:""}}</td> {% if obj.Format_issued == "eText" %} <td>{{ obj.vbid|default:"" }}</td> {% else %} <td>{{ obj.isbn|default:"" }}</td> {% endif %} {% if obj.e_price %} <td>{{obj.e_price_cur|default:""}}{{obj.e_price|default:""}}</td> {% else %} <td></td> {% endif %} <td>{{obj.Format_issued|default:""}}</td> <td>{{obj.Distribution_platform|default:""}}</td> {%endfor%} </tr> {%endfor%} </table>
方法2:后端统一处理(适合大量字段的场景)
如果不想逐个给模板变量加过滤器,可以在视图层处理查询结果,遍历所有字段将None统一替换为空字符串后再传递给模板,示例逻辑如下:
# 视图中查询完数据后处理 for book in query_results_books_list: for obj in book: # 遍历对象所有字段 for field in obj._meta.fields: field_name = field.name if getattr(obj, field_name) is None: setattr(obj, field_name, '')
内容的提问来源于stack exchange,提问作者django
相关产品推荐
相关产品推荐

