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 に答える