我有一个自定义模板标签
{% perpage 10 20 30 40 50 %}
用户可以写自己的数字,而不是10,20等。此外,这些数字的数量由用户定义。如何解析该标签并读取此数字?
我想使用“for”指令
更新:
@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)
最佳答案
从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
,将字符串转换为整数,然后对数字进行任何操作。最后,您的函数应返回您希望在模板中显示的输出字符串。更新资料
对于包含标记,您无需解析 token 。包含标签会为您完成此操作,并将其作为位置参数提供。在下面的示例中,我将数字转换为整数,可以根据需要进行更改。我已经定义了
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 }}
的表单字段关于django - 解析标签django中的字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11740475/