Django टेम्पलेट url टैग में url पैरामीटर कैसे जोड़ें?


100

इस तरह से url पैरामीटर प्राप्त करने के लिए मेरे विचार में:

date=request.GET.get('date','')

अपने यूआरएल में मैं इस तरह से यूआरएल टेम्पलेट टैग के साथ इस तरह से मापदंडों को पारित करने की कोशिश कर रहा हूं:

<td><a href="{% url 'health:medication-record?date=01/01/2001' action='add' pk=entry.id %}" >Add To Log</a></td>

के बाद पैरामीटर? स्पष्ट रूप से काम नहीं कर रहा है, मैं इस डेटा मूल्य को कैसे प्राप्त कर सकता हूं?




1
इस बारे में सोचते समय, "Django url पैरामीटर" और "url क्वेरी पैरामीटर" के बीच अंतर करना सुनिश्चित करें। Django url पैरामीटर में कॉन्फ़िगर किया गया है urls.pyका उपयोग कर path()जैसे path('client/<int:id>/')। URL क्वेरी पैरामीटर ?उदा के बाद url का हिस्सा हैं https://example.com/a/b/?param1=value1&param2=value2। यह प्रश्न url क्वेरी मापदंडों के बारे में है, लेकिन कुछ उत्तर Django url मापदंडों को संदर्भित करते हैं।
क्रिश्चियन लॉन्ग

Url क्वेरी स्ट्रिंग्स को रेंडर करने के लिए एक सरल कस्टम टेम्पलेट टैग के लिए यह उत्तर देखें ।
क्रिश्चियन लॉन्ग

जवाबों:


171

सबसे पहले आपको रेगेक्स में परम को स्वीकार करने के लिए अपना url तैयार करने की आवश्यकता है: (urls.py)

url(r'^panel/person/(?P<person_id>[0-9]+)$', 'apps.panel.views.person_form', name='panel_person_form'),

इसलिए आप इसे अपने टेम्पलेट में उपयोग करें:

{% url 'panel_person_form' person_id=item.id %}

यदि आपके पास एक से अधिक पैरा हैं, तो आप अपना regex बदल सकते हैं और निम्नलिखित का उपयोग करके टेम्पलेट को संशोधित कर सकते हैं:

{% url 'panel_person_form' person_id=item.id group_id=3 %}

@ मेहरनौरी अनुरोध का उपयोग करें। अनुरोध के बजाय प्राप्त करें। भूल
Cyd

1
वैसे भी संदर्भ से एक शब्दकोश पारित करके एक गतिशील संख्या में kwargs पारित करने के लिए है? उदाहरण के लिए, {% url target_link target_kwargs %}यह **kwargsएक फंक्शन में पास होने के बराबर होगा । मेरे पास उपयोग का मामला है जहां target_linkपरिवर्तनशील है और इसलिए url में kwargs की संख्या ज्ञात नहीं है
Teebagz

ध्यान दें कि ये क्वेरी पैरामीटर नहीं हैं, यह उत्तर django url मापदंडों का वर्णन कर रहा है। यह वह नहीं है जिसके बारे में ओपी ने पूछा (उत्तर हालांकि एक वैकल्पिक वैकल्पिक समाधान का वर्णन करता है)।
ब्योर्नॉव

93

मुझे यहाँ उत्तर मिला: क्या जिओगो के {% url%} टेम्पलेट टैग के माध्यम से क्वेरी पैरामीटर पारित करना संभव है?

बस उन्हें अंत तक जोड़ें:

<a href="{% url myview %}?office=foobar">
For Django 1.5+

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

[सुधार करने के लिए और कुछ नहीं है, लेकिन जब मैं कोड टिक को ठीक करूंगा तो मुझे एक बेवकूफ त्रुटि मिल सकती है]


1
यदि इसका उपयोग किया जाता है, तो सूचना कार्यालय 'फ़ॉबोबार' नेविगेशन बार पर उपयोगकर्ता को दिखाई देगा, है ना?
डायनेशेंग

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

3
सीन: हां। यदि आप ऐसा नहीं चाहते हैं, तो एक POST अनुरोध का उपयोग करें, या कुछ बैक-चैनल का तरीका पाएं पैरामस को पास करें। URL पर पासिंग GET अनुरोधों के लिए मानक है
Shayne

क्या दो तर्क दे रहा है?
फाइटव्यूकोड

27

बस टेम्पलेट URL जोड़ें:

<a href="{% url 'service_data' d.id %}">
 ...XYZ
</a>

Django 2.0 में उपयोग किया जाता है


@ScottSkiles आपको प्रश्न को फिर से Django के एक विशिष्ट संस्करण में संपादित करना चाहिए और फिर एक और संस्करण जोड़ना होगा। कुछ कहेंगे कि यह एक नकल है, लेकिन मैं असहमत हूं। एक प्रश्न में कई संस्करण भ्रामक हो सकते हैं।
बर्नार्डो डुटर्टे

17

यह तीन सरल चरणों में किया जा सकता है:

1)url टैग के साथ आइटम आईडी जोड़ें :

{% for item in post %}
<tr>
  <th>{{ item.id }}</th>
  <td>{{ item.title }}</td>
  <td>{{ item.body }}</td>
  <td>
    <a href={% url 'edit' id=item.id %}>Edit</a>
    <a href={% url 'delete' id=item.id %}>Delete</a>
  </td>
</tr>
{% endfor %}

2) urls.py में पथ जोड़ें :

path('edit/<int:id>', views.edit, name='edit')
path('delete/<int:id>', views.delete, name='delete')

3) आईडी का उपयोग व्यूहोम पर करें :

def delete(request, id):
    obj = post.objects.get(id=id)
    obj.delete()

    return redirect('dashboard')

डाउनवोट से बचने के लिए स्क्रीनशॉट जोड़ने के बजाय अपना कोड टाइप करें।
वैभव विशाल

सटीक बात मैं Django प्रलेखन में देख रहा था।
इगोर वोल्टाइक

10

Im यकीन है कि अगर विषय से बाहर im, लेकिन मैं मेरे लिए हल मिल गया; आपके पास एक वर्ग आधारित दृश्य है, और आप एक टेम्पलेट टैग के रूप में एक पैरामीटर प्राप्त करना चाहते हैं:

class MyView(DetailView):
    model = MyModel

    def get_context_data(self, **kwargs):
        ctx = super().get_context_data(**kwargs)
        ctx['tag_name'] = self.request.GET.get('get_parameter_name', None)
        return ctx

फिर आप अपना निवेदन करें /mysite/urlname?get_parameter_name='stuff

अपने टेम्पलेट में, जब आप सम्मिलित करते हैं, तो आपको {{ tag_name }}प्राप्त पैरामीटर मान ('सामान') तक पहुंच होगी। यदि आपके पास अपने टेम्पलेट में एक url है जिसे इस पैरामीटर की भी आवश्यकता है, तो आप कर सकते हैं

 {% url 'my_url' %}?get_parameter_name={{ tag_name }}"

आपको अपने url कॉन्फ़िगरेशन को संशोधित नहीं करना पड़ेगा


5

1: HTML

           <tbody>
            {% for ticket in tickets %}
              <tr>
                <td class="ticket_id">{{ticket.id}}</td>
                <td class="ticket_eam">{{ticket.eam}}</td>
                <td class="ticket_subject">{{ticket.subject}}</td>
                <td>{{ticket.zone}}</td>
                <td>{{ticket.plaza}}</td>
                <td>{{ticket.lane}}</td>
                <td>{{ticket.uptime}}</td>
                <td>{{ticket.downtime}}</td>
                <td><a href="{% url 'ticket_details' ticket_id=ticket.id %}"><button data-toggle="modal" data-target="#modaldemo3" class="value-modal"><i class="icon ion-edit"></a></i></button> <button><i class="fa fa-eye-slash"></i></button>
              </tr>
            {% endfor %}
            </tbody>

{% Url 'टिकट_डेट्स'% 'आपके विचारों में फ़ंक्शन नाम है

2: व्यूहोम

def ticket_details(request, ticket_id):

   print(ticket_id)
   return render(request, ticket.html)

टिकट_आईडी वह पैरामीटर है जो आपको टिकट_आईडी = टिकट से मिलेगा

3: URL.py

urlpatterns = [
path('ticket_details/?P<int:ticket_id>/', views.ticket_details, name="ticket_details") ]

/? पी - जहां टिकट_आईडी समूह का नाम है और पैटर्न मैच करने के लिए कुछ पैटर्न है।

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