2011-02-12 10 views
33

Bu hatayı django giriş sistemi için alıyorum.NoReverseMatch Hata

 (r'^contractManagement/login', 'django.contrib.auth.views.login', {'template_name': 'login.html'}), 

tam hata alıyorum:

Exception Type: NoReverseMatch 
Exception Value: Reverse for ''django.contrib.auth.views.login'' with arguments '()' and keyword arguments '{}' not found. 

ben bu hatayı alıyorum neden anlayamıyorum İşte benim urls.py bir parçasıdır. Başka bir şeye ihtiyacın olursa haberim olsun.

+1

mı? – MattoTodd

cevap

44

Bu URL'yi tersine çevirmeye çalıştığınız yeri göstermezsiniz, ancak çift tırnak içine aldığınız anlaşılıyor. Eğer url etiketini kullanarak ediyorsanız, url adını tırnak gerekmez unutmayın:

{% url django.contrib.auth.views.login %} 

değil

{% url 'django.contrib.auth.views.login' %} 
+6

Bu eğitimde bir hata mı o zaman? Daha önce de öyle çalıştığım gibi. – Dean

+1

Evet, bu örnekte öğreticide bir kusur gibi görünüyor https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.views.login –

+6

Özetle, Django 1.4 1.5 onlara ihtiyaç duyacakken tırnak içermemelidir. Diğer soruda bu konuyla ilgili daha fazla detay: http://stackoverflow.com/questions/10358929/url-gives-me-noreversematch-error-while-reverse-returns-the-url-just-fin –

6

Bunu yapmak için (bir isim senin url verecek , sen eğer yapmazsan django CommonMiddleware 302 tüm url'lerde yönlendirme yapıyor olacak neden Ayrıca tüm uRL'lerin sonuna bir eğik çizgi eklemek gerekir) url yöntemi kullanmak gerekir:

from django.conf.urls.defaults import * 

urlpatterns = patterns('', 
    url(r'^contractManagement/login/', 'django.contrib.auth.views.login', {'template_name': 'login.html'}, name='contract_login'), 

) 

Sonra kodunuzda tersini kullanabilir veya şablonlarınızda URL'yi kullanabilir ve gerçek URL'yi değiştirmeye karar verirseniz (örn: changedCotractManagement/login /), adınız aynı olduğu sürece kodunuz yine de iyi olacaktır. kodunda

:

from django.core.urlresolvers import reverse 
reverse('contract_login') 

şablonunda:

{% url contract_login %} 

Düzenleme: MrOodles

''the.unknown.view'' çok fazla qoutes dahil bildirdi olduğunu Görüyorsunuz
+0

Geriye doğru içe aktarmak için: 'django.core.urlresolvers içe aktarımından içe aktarma ' – MrOodles

19

başına.

alıntı sözdizimi Django 1.5 ve daha yüksek geçerli olacaktır. Django 1.3 veya 1.4 için, şablonda bu çizgi ile gelecekteki davranışı aktif hale olmalıdır: Django 1.5 için de geçerlidir

{% load url from future %} 

. Django 1.5+ ("gelecek" komutu olmadan) Django < = 1.4.x için

{% url "path.to.some.view" %} 

Klasik sözdizimi için


Örnek geçerli: Nerede ters beyanı

{% url path.to.some.view %} 
+0

Ah, örnek görünümler [' views.login' docs] (https://docs.djangoproject.com/en/1.4/topics/auth/ # django.contrib.auth.views.login) gelecekteki url öğesini içeriyor, ancak ne anlama geldiğinden bahsetmiyor ("extends" base.html "satırıyla ilgili bir şey olduğunu farz ettim) .. bu nedenle bu soruya son verdi!) 1.5+ sürüm üzerinde vurgu için – dbr

+1

+1 .. –