Djangoの{%url%}テンプレートタグを介してクエリパラメータを渡すことはできますか?


117

などの{% url %}タグにリクエストパラメータを追加したいの?office=foobarですが、

これは可能ですか?何も見つかりません。


クエリ文字列をレンダリングするための簡単なカスタムテンプレートタグについては、この回答を参照してください。
クリスチャンロング

回答:


169

いいえ、GETパラメータはURLの一部ではないためです。

それらを最後に追加するだけです:

<a href="{% url myview %}?office=foobar">

Django 1.5以降の場合

<a href="{% url 'myview' %}?office=foobar">

10
まあ、技術的にはそうです。RFC 1738によれば、HTTP URLの形式はhttp:// <host>:<port> / <path>?<searchpart>です。
naktinis

@naktinisはい、HTTP URL。A DjangoのURL、それほどではありません。したがって、「URL」のさまざまな定義については、どちらも正しいです:P

同様に、最後のスラッシュで、この結果は、URLを中断しないexample.com/myview/?office=foobar代わりにexample.com/myview?office=foobar
Al Sweigart 2017年

はい、でも何ですか?
ダニエルローズマン2017年

34

現在のパラメーターを新しいパラメーターと混同する方法:

{% url 'order_list' %}?office=foobar&{{ request.GET.urlencode }}

リクエスト変数を持つように設定を変更します。

from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS as TCP

TEMPLATE_CONTEXT_PROCESSORS = TCP + (
    'django.core.context_processors.request',
)

1
残念ながら、これはリストであるパラメーターでは機能しないようです
Arthur

@Arthur Djangosバグですか?
eri 2015年

3
これは確かにエレガントですが、ページングには機能しません。GETパラメータから前のページの "page = 1"も再び追加するためです。
Florian、

25

urlencode引数が変数の場合に使用します

<a href="{% url 'myview' %}?office={{ some_var | urlencode }}">

または、スペースなどの特殊文字がURLを壊す可能性があります。

ドキュメント:https : //docs.djangoproject.com/en/3.0/ref/templates/builtins/#urlencode


これは私にとっては機能しません。some_var変数はhrefで空を返しますが、テンプレートの他の場所で使用された場合は入力されていると表示されます。v2.1
ジオイデシック2018

レポートの@geoidesicへの感謝、コミット/バージョンのリリースノートの最新版を見つけた場合は知らせてください。
Ciro Santilli郝海东冠状病六四事件法轮功

8

まず、ばかげた答え:

{% url my-view-name %}?office=foobar

深刻な答え:いいえ、できません。DjangoのURLリゾルバーはURLのパス部分のみに一致するため、{% url %}タグはURLのその部分のみを反転できます。


確かに。それも理にかなっています...それがもう少しエレガントであることを願っています。
Brian D

たとえば、{%qpurl myview office = foobar%}など、よりエレガントなカスタムタグをいつでも作成できます。これは値を処理し、適切にエンコードすることもできます。
Spacedman、2011年

0

これを試して:

{% url 'myview' office=foobar %}

それは私のために働いた。それは基本的にそのリンクで逆を行い、与えられた引数を適用します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.