django中的自定义模板过滤器语法

时间:2014-01-23 10:29:39

标签: django filter django-template-filters

所以我创建了一个自定义过滤器:

@register.filter(name='field_values')
def field_values(model, field):
    return model.objects.values_list(field, flat=True)

获取模型类值和参数的字段,并返回该特定字段的模型对象列表。这是我尝试调用它的模板。

<tr>
    {% for field in fields %}
            <td>{{ model_class|field_values: field }} </td>
     {% endfor %}
</tr>

model_class是视图中动态创建的模型

views.py
...
if form.is_valid(): # All validation rules pass
    model_classes_field = form.cleaned_data['model_classes_field']
    model_class = get_model('Directories', model_classes_field)

我期待一切顺利运行,但我得到一个&#34; * field_values需要1个参数,0提供*&#34;错误。当我已插入参数时,为什么会发生这种情况?这是过滤器语法的问题吗?

1 个答案:

答案 0 :(得分:1)

冒号后面有一个空格,这会使解析器混乱。改为使用它:

{{ model_class|field_values:field }}

(注意你的代码非常低效:它一遍又一遍地查询数据库,每个字段一次。而不是这样做,你应该在视图中查询一次并按字段对输出进行分组。)

相关问题