从 Django 1.4 开始,您可以定义一个带有位置或关键字参数的简单标记。您可以在模板中循环浏览这些内容。
@register.simple_tag
def perpage(*args):
for x in args:
number = int(x)
# do something with x
...
return "output string"
当您perpage
在模板中使用标签时,
{% perpage 10 20 30 %}
模板标记函数将perpage
使用位置参数调用"10", "20", "30"
。这相当于在视图中调用以下内容:
per_page("10", "20", "30")
在perpage
我上面写的示例函数中,args
是("10", "20", "30")
. 您可以循环args
,将字符串转换为整数,然后对数字做任何您想做的事情。最后,您的函数应该返回您希望在模板中显示的输出字符串。
更新
对于包含标签,您不需要解析令牌。包含标签会为您执行此操作,并将它们作为位置参数提供。在下面的示例中,我已将数字转换为整数,您可以根据需要进行更改。我已经定义了一个PerPageForm
并覆盖了__init__
设置选项的方法。
from django import forms
class PerPageForm(forms.Form):
perpage = forms.ChoiceField(choices=())
def __init__(self, choices, *args, **kwargs):
super(PerPageForm, self).__init__(*args, **kwargs)
self.fields['perpage'].choices = [(str(x), str(x)) for x in choices]
@register.inclusion_tag('pagination/perpageselect.html')
def perpage (*args):
"""
Splits the arguments to the perpageselect tag and formats them correctly.
"""
choices = [int(x) for x in args]
perpage_form = PerPageForm(choices=choices)
return {'perpage_form': perpage_form}
然后在您的模板中,显示表单字段{{ perpage_form.perpage }}