3

我有一个自定义模板标签

{% 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)

4

1 回答 1

3

从 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 }}

于 2012-07-31T12:56:27.597 回答