0

含まれるテンプレートにデフォルトの動作を設定しようとしています。

テンプレートに変数を設定できない Django テンプレート システムに問題があります (Django Philosophy について読んだことがあり、理解しています)。

これが私の問題の例です:

  1. ニュースフィードをレンダリングするためのテンプレートを含めたい:

    template.html:
    ...
    {% include "_newsfeed.html" with slicing=":20" %}
    ...
    

    slicing引数の入力を強制されないようにして、デフォルトの動作を設定したいと思います。":20"

  2. 私の_newsfeed.html中で、私はやりたいです(疑似コード、それは動作しません):

    _newsfeed.html:
    ...
    {% if not slicing %}{% with slicing=":20" %}{% endif %}
    
    {% for content in newsfeed_content|slice:slicing %} 
        {# Display content #}
    {% endfor %}
    
    {% if not slicing %}{% endwith %}{% endif %}
    

代わりに、DRY ルールに従わない (そして私を満足させない!) 以下でこれを行うことになります。

_newsfeed.html:
...
{% if not slicing %}{% with slicing=":20" %}

    {% for content in newsfeed_content|slice:slicing %} 
        {# Display content #}
    {% endfor %}

{% endwith %}{% else %}

    {% for content in newsfeed_content|slice:slicing %} 
        {# Display content #}
    {% endfor %}

{% endif %}

どうすればいいですか?

4

1 に答える 1

1

ビューファイルではなくテンプレートを介してこれを実行する場合は、スライスに基づいて独自のフィルターを作成できます。

from django.template.defaultfilters import slice_filter

@register.filter("slice_default", is_safe=True)
def slice_filter_20(value, arg=":20"):
    return slice_filter(value, arg)
于 2012-09-05T09:45:28.003 に答える