我希望在要包含的模板中设置默认行为。
我有一个Django模板系统的问题,不允许在模板中设置变量(我已经阅读了关于Django哲学,我理解它。)
以下是我的示例问题:
我想要包含一个模板来呈现新闻源:
template.html:
...
{% include "_newsfeed.html" with slicing=":20" %}
...
我不想被迫输入slicing
参数,并设置默认行为,让我们说":20"
在我的_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 %}
我该怎么办?
答案 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)