Django 模板 filter 实现字符转列表
用 Django 做表单时候,多选项会按 列表
格式,以字符串的形式记录在数据库:
由于需要用已记录的字段去判断是否给 input 添加 checked 属性,但直接迭代这个项会发现它是以字符串的形式被迭代的,也就是以字符为单位进行迭代,这可不是我们想要的效果。
我想要的是,让这个字段的值是以一个 list() 的形式来使用的。这时候,就需要自定义 django 模板过滤器来实现需求。
创建自定义标签文件
在应用的根目录创建 templatetags
目录,在里面创建自定义标签文件,文件名是未来 {% load file_name %}
使用的,所以可以把自定义标签进行归类,如果没那么多自定义标签,完全可以这样命名 myapp_tags.py
,myapp
是应用的名称。使用时候,在模板中 {% load myapp_tags %}
这样加载。
自定义标签
from django import template
register = template.Library()
# 字符串转列表
@register.filter
def str_to_list(value):
if '[' and ']' in value:
return eval(value)
使用自定义标签/过滤器
{% load myapp_tags %}
{% for i in items|str_to_list %}
{{ i }}
{% endfor %}