2017-02-18 89 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