2013-05-10 88 views
3

我想在表單提交併且有效後將success_url重定向到相同的表單。 Online我找到了解決方案的說明,但是此解決方案和我的其他代碼選項生成相同的錯誤消息。Django:動態success_url導致「'NoneType'對象沒有屬性'find'」

Exception Value: 'NoneType' object has no attribute 'find' 

urls.py

url(r'^pictures/(?P<id>\d+)/$', PictureUpload.as_view(), name='picture_upload'), 
... 

1 views.py選項

複製現有的鏈接路徑

class PictureUpload(FormView): 
    form_class = PictureForm 
    template_name = 'picture_upload.html' 
    def get_success_url(self): 
     success_url = lambda self: self.request.path 

第二views.py選項

重新創建鏈接基於路徑的路徑反向網址加上ID

class PictureUpload(FormView): 
    form_class = PictureForm 
    template_name = 'picture_upload.html' 
    def get_success_url(self): 
     success_url = reverse('picture_upload', 
      kwargs={'id': self.kwargs.get('id', None)}) 

這兩個選項都以相同的回溯結束。

Request Method: POST 
Request URL: http://127.0.0.1:8000/pictures/2/ 

Django Version: 1.5.1 
Python Version: 2.7.1 
Installed Applications: 
('django.contrib.admin', 
'django.contrib.admindocs', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.gis', 
'django.contrib.humanize', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'django.contrib.admin', 
'django.contrib.admindocs', 
'picture', 
'debug_toolbar') 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'debug_toolbar.middleware.DebugToolbarMiddleware') 


Traceback: 
File "/Users/Development/virtual-re/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    115.       response = callback(request, *callback_args, **callback_kwargs) 
File "/Users/Development/virtual-re/lib/python2.7/site-packages/django/views/generic/base.py" in view 
    68.    return self.dispatch(request, *args, **kwargs) 
File "/Users/Development/virtual-re/lib/python2.7/site-packages/django/views/generic/base.py" in dispatch 
    86.   return handler(request, *args, **kwargs) 
File "/Users/Development/virtual-re/lib/python2.7/site-packages/django/views/generic/edit.py" in post 
    165.    return self.form_valid(form) 
File "/Users/Development/project/apps/picture/picture_views.py" in form_valid 
    180.   return super(PictureUpload, self).form_valid(form) 
File "/Users/Development/virtual-re/lib/python2.7/site-packages/django/views/generic/edit.py" in form_valid 
    65.   return HttpResponseRedirect(self.get_success_url()) 
File "/Users/Development/virtual-re/lib/python2.7/site-packages/django/http/response.py" in __init__ 
    388.   parsed = urlparse(redirect_to) 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urlparse.py" in urlparse 
    134.  tuple = urlsplit(url, scheme, allow_fragments) 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urlparse.py" in urlsplit 
    173.  i = url.find(':') 

Exception Type: AttributeError at /pictures/2/ 
Exception Value: 'NoneType' object has no attribute 'find' 

回答

10

看起來既不你get_success_url實現實際上會返回URL的,所以假設不只是你傳遞無到HttpResponseRedirect剪切和粘貼錯誤。

+0

嗨,彼得,哦,男孩,我一定是太累了。謝謝您的回答。正確的功能應該是這樣的:'def get_success_url(self): return reverse( 'picture_upload', kwargs = {'id':self.kwargs.get('id',None)},)' – neurix 2013-05-10 21:17:46

相關問題