我有自定义模板标记
{% perpage 10 20 30 40 50 %}
用户可以编写自己的数字而不是10,20等。此外,这些数字的数量由用户定义。我该如何解析这个标签并阅读这些数字? 我想用“for”-instruction
更新:
@register.inclusion_tag('pagination/perpageselect.html')
def perpageselect (parser, token):
"""
Splits the arguments to the perpageselect tag and formats them correctly.
"""
split = token.split_contents()
choices = None
x = 1
for x in split:
choices = int(split[x])
return {'choices': choices}
所以,我有这个功能。我需要从模板标签中获取参数(数字),并将它们转换为整数。然后,我需要提交一个提交表单,将选项(如GET参数)传递给URL (...&perpage=10)
答案 0 :(得分:3)
从Django 1.4开始,您可以定义一个带有位置或关键字参数的simple tag。您可以在模板中循环显示这些内容。
@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 }}