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 回答