0

テンプレートでそのようなことをすると、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 %}

それはまさに私が望むものを私に与えますが、モデルフィールドメソッドなどを使用して、それを行う他の方法があると思いました。

アラン

4

1 に答える 1

1

テンプレートでそのようなことをすると、djangoは何をしますか

{{ object.parameter }}

変数とルックアップを参照してください。

もちろん、望ましい出力は値、値、値です。テンプレートでIFを使用するか、印刷するすべての値に対して何らかのテンプレートタグフィルターを使用する必要があり、それは賢明なことではないと感じるため、そのために何らかのフィルターを使用したくありません。

本当に簡単なフィルターを作成できます。

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

とても簡単:

{{ object.parameter|comma_join }}

なぜそのような単純な解決策を避けたいのですか?

それはまさに私が望むものを私に与えますが、モデルフィールドメソッドなどを使用して、それを行う他の方法があると思いました。

もちろん、そのようなメソッドを追加することもできます:

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

テンプレートで次のように使用します。

{{ object.comma_join_parameter }}
于 2012-10-24T12:02:12.487 に答える