Django Reverse with तर्कों '()' और खोजशब्द तर्कों '{}' को नहीं मिला


144

नमस्ते, मुझे एक समस्या है।

मेरे पास इस तरह एक यूआरएल पैटर्न है:

# mproject/myapp.urls.py

url(r'^project/(?P<project_id>\d+)/$','user_profile.views.EditProject',name='edit_project'),

यह ब्राउज़र में ठीक काम करता है, लेकिन परीक्षण के लिए, जब मैं शेल में ऐसा करता हूं:

from django.test import Client
from django.core.urlresolvers import reverse

client= Client()
response = client.get(reverse('edit_project'), project_id=4)

मैं खूंखार हो गया:

NoReverseMatch: Reverse for 'edit_project' with arguments '()' and keyword arguments '{}' not found.

मुझे यहां क्या समझ नहीं आ रहा है?


में नवीनतम Django , रिवर्स यूआरएल से आयात किया जाता। अर्थात्from django.urls import reverse
सुहैलव्स

जवाबों:


261

आपको निर्दिष्ट करना होगा project_id:

reverse('edit_project', kwargs={'project_id':4})

यहां डाॅ


1
क्या आप संभवतः इसे एक टेम्प्लेट के भीतर कैसे कर सकते हैं?
गर्सहोम

1
डॉक्स के उदाहरण हैं
miki725

एक चाम की तरह काम किया!
मुहम्मद हसीब

6

समाधान @ miki725 बिल्कुल सही है। वैकल्पिक रूप से, यदि आप argsविरोध के रूप में विशेषता का उपयोग करना चाहते हैं kwargs, तो आप बस अपना कोड इस प्रकार संशोधित कर सकते हैं:

project_id = 4
reverse('edit_project', args=(project_id,))

इसका एक उदाहरण प्रलेखन में पाया जा सकता है । यह अनिवार्य रूप से एक ही बात करता है, लेकिन विशेषताओं को तर्क के रूप में पारित किया जाता है। याद रखें कि पारित किए जाने वाले किसी भी तर्क को उलट होने से पहले एक मूल्य सौंपा जाना चाहिए। बस सही नाम स्थान का उपयोग करें, जो इस मामले में है 'edit_project'


1
मुझे इसकी संक्षिप्तता पसंद है।
Bartleby

2

जब मैंने सक्रियण लिंक बनाने के लिए रिवर्स का उपयोग करने का प्रयास किया और इसे ईमेल के माध्यम से भेजा तो इस समस्या ने मुझे बहुत सिरदर्द दिया। इसलिए मुझे लगता है कि परीक्षणों से यह समान होगा। ऐसा करने का सही तरीका निम्नलिखित है:

from django.test import Client
from django.core.urlresolvers import reverse

#app name - name of the app where the url is defined
client= Client()
response = client.get(reverse('app_name:edit_project', project_id=4)) 

1
मैं सिर्फ यह कोशिश की, यह काम नहीं करता है। @ miki725 का जवाब सही है।
डैनियल वैन फ्लाईमेन

1
मेरा मानना ​​है कि एक ब्रेस गलत जगह पर है: प्रतिक्रिया = client.get (रिवर्स ('edit_project', project_id = 4))
Wim Feijen

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