自定义django对象参数值输出

时间:2012-10-24 11:54:46

标签: django django-models django-templates

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

{{ object.parameter }}

我问这个是因为在arrayfields(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方法或其他东西。

艾伦

1 个答案:

答案 0 :(得分:1)

  

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

     

{{object.parameter}}

请参阅variables and lookups

  

期望的输出当然是价值,价值,价值。我宁愿不使用某种过滤器,因为那样我就不得不在模板中使用IF,或者为我打印出来的每个值使用某种模板标签过滤器,这样做并不是一件好事。 / p>

你可以做一个非常简单的过滤器:

@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 }}