2016-04-04 2 views
1

основного проекта urls.py:URL не перенаправлять с kwargs не NoReverseMatch

from django.conf.urls import include, url 
from django.contrib import admin 

urlpatterns = [ 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'', include('data.urls')), 
] 

urls.py:

urlpatterns = [ 
    url(r'^doll/$', views.doll_describer), 
    url(r'^yourdolldata/(?P<id>\d+)/$', views.yourDollData), 
    url(r'^connexion/$', views.connexion), 
    url(r'^logout/$', views.deconnexion), 
] 

views.py

def doll_describer(request): 
     # if this is a POST request we need to process the form data 
    if request.method == 'POST': 
     # create a form instance and populate it with data from the request: 
     form = DollForm(request.POST) 
     print(form) 
     # check whether it's valid: 
     if form.is_valid(): 
      print("was valid") 
      doll = form.save(commit=False) 
      doll.save() 
      print("DOG.ID=",doll.id) 
      return HttpResponseRedirect(reverse('yourDollData', kwargs={'id': doll.id})) 

     else : 
      print("form is not valid") 

    # if a GET (or any other method) we'll create a blank form 
    else: 
     form = DollForm() 
     print("wasn't valid") 

    return render(request, 'data/doll.html', {'form':DollForm}) 

def yourDollData(request,id): 
    doll = DollData.objects.get(id=id) 
    print("Doll=",doll) 
    print("DOG_TYPE=",type(doll)) 
    return render(request, 'data/save.html', {'doll': doll}) 

я не могу понять, почему я получаю следующую ошибку:

NoReverseMatch в/куклы/

И это касается HttpResponseRedirect(reverse('yourDollData', kwargs={'id': doll.id})) Tough, все в порядке с doll.id, который распечатывается правильно одну строку раньше.

Конечно, когда я получаю жесткий доступ в своем браузере до 127.0.0.1:8000/yourdolldata/15/, он отлично работает. Так что все дело в этом процессе реверсирования. Я предполагаю, что это имеет какое-то отношение к моему регулярному выражению URL, не совпадающему с тем, что я думаю, что я реверсирую ...

Как я могу исправить это? Я знаю, что это распространенная ошибка, но я не вижу ничего плохого после того, как проведу исследование в Интернете.

+1

Вы включаете URL-адреса приложения в основные URL-адреса, используя пространство имен? – alecxe

+0

Я не понимаю, что вы здесь предлагаете ... Не могли бы вы объяснить немного больше? – BoobaGump

+1

Хорошо, пожалуйста, разместите содержимое urls.py на уровне проекта. Благодарю. – alecxe

ответ

0

Добавить имя в URL, прикрепленной к мнению, вы пытаетесь реверс:

url(r'^yourdolldata/(?P<id>\d+)/$', views.yourDollData, name='check_doll_data') 

Возьмите предыдущее имя в качестве аргумента reverse функции.

 return HttpResponseRedirect(reverse('check_doll_data',kwargs={'id': dog.id})) 

Reverse можно взять URL, имя вида или имя зрения, присоединенной к URL в качестве первого аргумента.