क्या 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>? <खोज>।
नकटिनियां

@naktinis एक HTTP URL, हाँ। एक Django यूआरएल, इतना नहीं । तो "URL" की विभिन्न परिभाषाओं के लिए, आप दोनों सही हैं: P

क्या इसके परिणामस्वरूप अनुगामी स्लैश url को बाधित नहीं कर रहा है, जैसे कि example.com/myview/?office=foobarइसके बजाय example.com/myview?office=foobar?
अल स्वेगार्ट

हाँ लेकिन इतना क्या?
डैनियल रोजमैन

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
दुर्भाग्य से यह उन मापदंडों के साथ काम नहीं करता है जो सूची में हैं
आर्थर

@ आर्थर यह Djangos बग है?
एरी

3
यह वास्तव में सुरुचिपूर्ण होगा, लेकिन पेजिंग के लिए काम नहीं करता है क्योंकि यह पिछले पृष्ठ के "पेज = 1" को फिर से जीईटी परमेस से जोड़ता है।
फ्लोरियन

25

urlencodeयदि तर्क एक चर है तो उपयोग करें

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

या रिक्त स्थान जैसे विशेष वर्ण आपके URL को तोड़ सकते हैं।

दस्तावेज़ीकरण: https://docs.djangoproject.com/en/3.0/ref/templates/builtins/#otlodeode


यह मेरे लिए काम नहीं करता है .. some_varचर href में खाली लौटता है, लेकिन टेम्पलेट में कहीं और उपयोग किए जाने पर भरा हुआ दिखाया जाता है। v2.1
जियोसाइक्लिक

रिपोर्ट के लिए @geoidesic धन्यवाद, मुझे बताएं कि क्या आपको आगे ब्रेकिंग कमिट / वर्जन रिलीज नोट्स मिलेंगे, या 1.9 पर पुन: पेश करने का प्रबंधन होगा।
सिरो सेंटिल्ली 46 iro iro i 法轮功 '30

8

सबसे पहले, एक मूर्खतापूर्ण जवाब:

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

एक गंभीर अन्वेषक: नहीं, आप नहीं कर सकते। Django का URL रिज़ॉल्वर URL के केवल पथ भाग से मेल खाता है , इस प्रकार {% url %}टैग केवल URL के उस भाग को उलट सकता है।


वास्तव में। यह भी समझ में आता है ... मैं बस चाहता हूं कि यह उससे थोड़ा अधिक सुरुचिपूर्ण था।
ब्रायन डी

आप उदाहरण के लिए हमेशा एक अधिक सुंदर कस्टम टैग लिख सकते हैं - {% qpurl myview कार्यालय = फ़ॉबर%}। यह भी मूल्यों को संसाधित कर सकता है और उन्हें उचित रूप से एन्कोड कर सकता है।
स्पेल्डमैन

0

इसे इस्तेमाल करे:

{% url 'myview' office=foobar %}

इसने मेरे लिए काम किया। यह मूल रूप से उस लिंक पर एक रिवर्स करता है और दिए गए तर्कों को लागू करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.