Django:在include模板中设置默认行为

时间:2012-09-05 09:38:07

标签: python django django-templates

我希望在要包含的模板中设置默认行为。

我有一个Django模板系统的问题,不允许在模板中设置变量(我已经阅读了关于Django哲学,我理解它。)

以下是我的示例问题:

  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 %}
    
  3. 相反,我最终会在下面这样做,并不遵循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 %}
    

    我该怎么办?

1 个答案:

答案 0 :(得分: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)