2012-09-05 90 views
0

我期待在要包含的模板中設置默認行爲。Django:在包含模板中設置默認行爲

我有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 %} 
    

相反,我結束了下面這樣做,不遵循乾燥的原則(和不滿足我!):

_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

無法在傳遞給模板之前在代碼中設置默認值? – jsj

+0

'_newsfeed.html'包含在webapp的許多部分中,並且以前具有默認行爲(即所有當前的包含標記都是'{%include「_newsfeed.html」%}'')。我想增加定製切片的可能性,而不必修改webapp的所有其他部分。 –

回答

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) 
相關問題