Django'nun {% url%} şablon etiketiyle sorgu parametrelerini geçirmek mümkün mü?


117

Bir {% url %}etikete istek parametreleri eklemek istiyorum ?office=foobar.

Mümkün mü? Üzerinde hiçbir şey bulamıyorum.


Sorgu dizelerini işlemek için basit bir özel şablon etiketi için bu yanıta bakın .
Christian Long

Yanıtlar:


169

Hayır, çünkü GET parametreleri URL'nin parçası değildir.

Bunları sonuna ekleyin:

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

Django 1.5+ için

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

10
Teknik olarak öyleler. RFC 1738'e göre , bir HTTP URL'si şu biçimdedir: http: // <host>: <port> / <path>? <searchpart>.
naktinis

@naktinis Bir HTTP URL'si, evet. Bir Django URL'si, pek değil . Yani "URL" nin çeşitli tanımları için ikiniz de

Gibi, url kesintiye eğik çizgiyle değil bu sonucu mu example.com/myview/?office=foobaryerine example.com/myview?office=foobar?
Al Sweigart

Evet ama ne olmuş yani?
Daniel Roseman

34

Mevcut parametreleri yenisiyle karıştırmanın bir yolu:

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

Ayarlarınızı istek değişkenine sahip olacak şekilde değiştirin:

from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS as TCP

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

1
Ne yazık ki bu, liste olan parametrelerle çalışmıyor gibi görünüyor
Arthur

@Arthur Djangos hatası mı?
eri

3
bu gerçekten zarif olurdu, ancak önceki sayfanın "page = 1" kısmını GET parametrelerinden tekrar eklediğinden sayfalama için çalışmaz.
Florian

25

urlencodeBağımsız değişken bir değişkense kullanın

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

veya boşluklar gibi özel karakterler URL'nizi bozabilir.

Belgeler: https://docs.djangoproject.com/en/3.0/ref/templates/builtins/#urlencode


Bu benim için çalışmıyor .. some_vardeğişken href içinde boş olarak dönüyor, ancak şablonun başka bir yerinde kullanılırsa dolu olduğu gösteriliyor. v2.1
geoidesic

@geoidesic rapor için teşekkürler, son çıkan commit / sürüm sürüm notlarını bulursanız bana bildirin veya 1.9'da yeniden üretmeyi başarırsanız.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

8

İlk olarak, aptalca bir cevap:

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

Ciddi bir cevaplayıcı: Hayır, yapamazsınız. Django'nun URL çözümleyicisi , URL'nin yalnızca yol kısmıyla eşleşir , bu nedenle {% url %}etiket , URL'nin yalnızca o kısmını tersine çevirebilir.


Aslında. Bu da mantıklı ... Keşke bundan biraz daha zarif olsaydı.
Brian D

Her zaman daha zarif bir özel etiket yazabilirsiniz - örneğin, {% qpurl myview office = foobar%}. Bu aynı zamanda değerleri işleyebilir ve uygun şekilde kodlayabilir.
Spacedman

0

Bunu dene:

{% url 'myview' office=foobar %}

Benim için çalıştı. Temelde bu bağlantıda tersine çevirir ve verilen argümanları uygular.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.