0

当我在模板中做类似的事情时,django 做了什么

{{ object.parameter }}

我问这个是因为在数组字段(postgresql 数组字段)的情况下,它会打印出来

{'value', 'value', 'value'}

(因为这就是 postgresql 在 arrayfields 中存储数组的方式)

或者

['value','value','value']

如果我使用字段 post_init 方法将 postgresql 数组转换为 python 列表。

期望的输出当然是价值、价值、价值。我宁愿不为此使用某种过滤器,因为那样我将不得不在模板中使用 IF 或对我打印出的每个值使用某种模板标签过滤器,这感觉不是一件聪明的事情。

顺便说一句,我知道我可以在模板中做类似的事情:

{% for choice in field.choices %}
    {{ choice }}
    {% if forloop.last %}
    {% else %}, 
    {% endif%}
{% endfor %}

这正是我想要的,但我认为还有其他方法可以做到这一点 - 使用一些 modelfield 方法或其他东西。

艾伦

4

1 回答 1

1

当我在模板中做类似的事情时,django 做了什么

{{对象.参数}}

查看变量和查找

期望的输出当然是价值、价值、价值。我宁愿不为此使用某种过滤器,因为那样我将不得不在模板中使用 IF 或对我打印出的每个值使用某种模板标签过滤器,这感觉不是一件聪明的事情。

您可以制作一个非常简单的过滤器:

@register.filter
def comma_join(values):
    return u', '.join(values)

很简单:

{{ object.parameter|comma_join }}

你为什么要避免这样一个简单的解决方案?

这正是我想要的,但我认为还有其他方法可以做到这一点 - 使用一些 modelfield 方法或其他东西。

当然你也可以添加这样的方法:

class YourModel(models.Model):
    # ....
    def comma_join_parameter(self):
        return u', '.join(self.parameter)

并在您的模板中使用它:

{{ object.comma_join_parameter }}
于 2012-10-24T12:02:12.487 回答