2017-09-03 106 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中。