كيف يمكنني استخدام django.core.urlresolvers.reverse مع مرجع وظيفة بدلاً من نمط URL المسمى؟

StackOverflow https://stackoverflow.com/questions/134629

  •  02-07-2019
  •  | 
  •  

سؤال

في urls.py الملف عندي :

from myapp import views
...
(r'^categories/$', views.categories)

أين categories هي وظيفة عرض في الداخل myapp/views.py.لا يوجد مرجع آخر لخطوط URLconf views.categories.

في ملف اختبار الوحدة، أحاول الحصول على عنوان URL هذا باستخدام django.core.urlresolvers.reverse(), ، بدلاً من مجرد نسخ '/categories/' (DRY وكل ذلك).لذلك أنا أملك:

from django.core.urlresolvers import reverse
from myapp import views
...

url = reverse(views.categories)

عندما أقوم بإجراء الاختبارات، أحصل على NoReverseMatch خطأ:

NoReverseMatch: Reverse for '<function categories at 0x1082f30>' with arguments '()' and keyword arguments '{}' not found.

يتطابق بشكل جيد إذا قمت بجعل نمط عنوان URL نمطًا مسمىًا، مثل هذا:

url(r'^categories/$', views.categories, 'myapp-categories')

واستخدم اسم النمط لمطابقته:

url = reverse('myapp-categories')

ولكن بقدر ما أستطيع أن أقول من ال reverse توثيق, ، لا أحتاج إلى جعله نمط عنوان URL مسمى لاستخدامه فقط reverse.

أي أفكار ما أفعله خطأ؟

هل كانت مفيدة؟

المحلول 2

بعد مزيد من البحث، تبين أن المشكلة تتعلق بكيفية استيراد وحدة المشاهدات:

كيف يمكنني بنجاح تمرير مرجع دالة إلى دالة Django العكسية ()؟

شكرا للمساعدة رغم ذلك يا شباب:لقد ألهمتني للنظر إليها بشكل صحيح.

نصائح أخرى

مثال جاك إم هو الصحيح تقريبًا.

يجب أن تكون دالة url، وليست صفًا، إذا كنت تريد استخدام عناوين url المسماة.

url(r'^no_monkeys/$', 'views.noMonkeys', {}, "no-monkeys"),

يعمل هذا، وجميع التعليمات البرمجية التي قمت بلصقها صحيحة وتعمل بشكل جيد (لقد قمت للتو بنسخها في تطبيق اختبار/مشروع نظيف وقام بعكس عنوان URL دون أي مشكلة).إذن، هناك شيء آخر يحدث هنا ولم تظهره لنا.قم بالتبسيط وصولاً إلى الأساسيات البسيطة حتى تنجح، ثم ابدأ بإضافة التعقيد مرة أخرى وانظر إلى أين ستنتهي.

يمكنك أيضًا إجراء "./manage.py Shell" ثم استيراد الوظيفة العكسية ووظيفة العرض بشكل تفاعلي ومحاولة العكس.سيؤدي ذلك إلى إزالة إعداد الاختبار كسبب محتمل.

تستخدم الدالة العكسية في الواقع "اسم" عنوان URL.يتم تعريف هذا على النحو التالي:

urlpatterns = patterns('',
    (r'^no_monkeys/$', 'views.noMonkeys', {}, "no-monkeys"),
    (r'^admin/(.*)', admin.site.root),
)

الآن يمكنك الاتصال بالعكس باستخدام السلسلة "no-monkeys" للحصول على عنوان URL الصحيح.

تحرير النينجا: هنا رابط إلى مستندات جانغو حول هذا الموضوع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top