我有一个自定义模板标签

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

10-11 17:20