解析标签django中的字符串

时间:2012-07-31 12:49:24

标签: django parsing django-templates

我有自定义模板标记

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

1 个答案:

答案 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 }}

显示表单字段