2017-02-18 88 views
0

我有一個視圖create_rating在提交表單後,我希望在視圖上處理rating_upload,然後我想重定向回create_rating視圖。不能似乎得到它的工作,我的最新代碼如下。我想當我點擊submitcreate-rating頁面上,它應該發送video_idrating_upload,然後從那裏我可以將它作爲參數發送回create_rating。文檔也顯示了這一點。我試過幾件事情最新的錯誤是什麼我已經表明..傳遞參數以反向查看django

網址:

urlpatterns = [ 
    url(r'^upload', UploadVideo.as_view(), name='upload'), 
    url(r'^(?P<pk>[0-9]+)/$', VideoView.as_view(), name='videoview'), 
    url(r'^(?P<video_id>\d+)/create_rating', create_rating, name='create_rating'), 
    url(r'^(?P<video_id>\d+)/rating_upload', rating_upload, name='rating_upload'), 
    url(r'^(?P<video_id>\d+)/rating_uploaded', rating_upload, name='rating_upload') 
] 

觀點:

def create_rating(request, video_id): 
    vid = get_object_or_404(Video, pk=video_id) 
    past_ratings = vid.rating.order_by('date_created')[:5] 
    template = loader.get_template('create_rating.html') 
    context = { 
     'vid': vid, 'past_ratings': past_ratings 
    } 
    return HttpResponse(template.render(context, request)) 


def rating_upload(request, video_id): 
    template = loader.get_template('rating_upload.html') 
    rated_video = Video.objects.get(pk=video_id) 
    context = { 
     'rated_video': rated_video 
    } 
    return HttpResponseRedirect(reverse('create_rating', video_id)) 

模板,create_rating.html

<p>{{ vid.title }}</p> 

<form action="{% url 'rating_upload' vid.pk %}" method="post"> 

{% csrf_token %} 
<input type="text" name="rate_comment"> 
<input type="submit" value="Rate Video"> 

最新的錯誤:

Request Method: POST 
Request URL: http://127.0.0.1:8000/video/32/rating_uploaded 

Django Version: 1.10.5 
Python Version: 2.7.10 
Installed Applications: 
['django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'video'] 
Installed Middleware: 
['django.middleware.security.SecurityMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware'] 



Traceback: 

File "/Users/RyanHelling/virtualenvs/env1/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner 
    39.    response = get_response(request) 

File "/Users/RyanHelling/virtualenvs/env1/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response 
    187.     response = self.process_exception_by_middleware(e, request) 

File "/Users/RyanHelling/virtualenvs/env1/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response 
    185.     response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "/Users/RyanHelling/PycharmProjects/flash2/video/views.py" in rating_upload 
    63.  return HttpResponseRedirect(reverse('create_rating', video_id)) 

Exception Type: TypeError at /video/32/rating_uploaded 
Exception Value: an integer is required 
+0

'TypeError at/video/32/rating_uploaded an integer is required'錯誤反饋看起來像是它獲取了video這個詞,並試圖將它映射到一個id,當它不應該。我沒有看到/視頻/在任何地方的路線,所以我不知道它從哪裏得到的?你是否在任何地方使用命名空間或導入URL? – davidejones

+0

嗨,是的,我是進口的網站到一個級別以上是'視頻' – ratrace123

回答

1

嘗試

return HttpResponseRedirect(reverse('create_rating', args=(video_id))) 

,而不是

return HttpResponseRedirect(reverse('create_rating', video_id)) 

Documentation建議通過你的ARGS作爲一個元組。

+0

我試過了,它告訴我'reverse()沒有關鍵字參數' – ratrace123

+0

@ ratrace123,你從哪裏導入反向?爲你的錯誤,我只發現[這個](http://stackoverflow.com/questions/42173580/django-tutorial-typeerror-at-polls-3-vote-reverse-takes-no-keyword-argumen)問題和這是關於錯誤的進口。根據文檔,反向最多有5個參數:reverse(viewname,urlconf = None,args = None,kwargs = None,current_app = None)。 – mxle

+0

ahhh我認爲這是我的問題的一部分,我有它從audioloop導入或類似的東西...我改變它從'django.urls'導入 – ratrace123