2017-09-03 50 views
0

这可能是一个简单的问题,但我已经在这上好几个小时了,我一定会错过一些东西。在这里,我们去:在Django中没有找到反向

urls.py:

urlpatterns = [ 
# Event patterns 
url('^$', views.BuddyProgram.as_view(), name='buddy_program'), 
url('^dashboard/$', views.BuddyDashboard.as_view(), name='buddy_dashboard'), 
url('^thank-you/$', views.BuddyFinal.as_view(), name='final'), 

url('^completed_intro/$', views.CompletedIntro.as_view(), name='buddy_completed_intro'), 
url('^completed_passive_track/$', views.CompletedPassiveTrack.as_view(), name='buddy_completed_passive_track'), 
url('^about/$', views.BuddyAbout.as_view(), name='buddy_about'), 
url('^list/$', views.Buddies.as_view(model=BuddyProfile), name='buddies'), 
url('^signup/$', views.BuddySignupView.as_view(), name='buddy_signup'), 

# url(r'^(?P<question_id>[0-9]+)/$', views.detail, name='detail'), 
url(r'^(?P<buddy_id>[0-9]+)/$', views.Buddy.as_view(model=BuddyProfile), name='buddy'), 

]

views.py:

class BuddyFinal(TemplateView): 
    template_name = 'buddy/thank_you.html' 

class BuddySignupView(SignupView): 

    template_name = 'buddy/buddy_create.html' 
    success_url = reverse('final') # profile specific success url 
    form_class = BuddySignupForm 
    profile_class = BuddyProfile # profile class goes here 

    def form_valid(self, form): 

     response = super(BuddySignupView, self).form_valid(form) 
     profile = self.profile_class(user=self.user) 

     profile.save() 

     return response 

和错误,我得到:

django.core.urlresolvers.NoReverseMatch: Reverse for 'final' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: [] 
+2

在加载BuddySignupView类时,您的URL注册尚未完成。在实际完成URL注册之前,不要查找“success_url”。 –

回答

1

随着你导入BuddySignupVi时,URL尚未加载ew(因此执行reverse),Django无法找到该URL。

您应该使用reverse_lazy代替:https://docs.djangoproject.com/en/1.11/ref/urlresolvers/#reverse-lazy

在你views.py文件:

from django.core.urlresolvers import reverse_lazy 

class BuddySignupView(SignupView): 

    template_name = 'buddy/buddy_create.html' 
    success_url = reverse_lazy('final') # profile specific success url 

reverse_lazy仅在 “运行”(当Django的实际需要的值),而不是“进口时间扭转URL名称“什么时候一切都可能还没有。

+0

它确实工作,但有几个排队在视图中,我有'类BuddyProgram(RedirectView):''使用'reverse'并且它工作。为什么一个人工作,而不是另一个? – mgPePe

+0

@mgPePe我不能说没有看到代码。也许这行不会被调用导入时间(例如,你正在使用'def get_success_url()'或类似的东西,只在运行时调用)?或者它指的是可能已经导入的另一个URL名称? –

0

这个错误即将到来because in any template file you are accecsing url(thank-you or signup) in wrong format.确保这个网址在html中。