django之使用反向 django 将参数传递给 View

kevingrace 阅读:89 2025-06-02 22:19:02 评论:0

我有一个 View create_rating,在我提交表单后,我希望在 View rating_upload 上处理它,然后我想重定向回 create_rating View 。似乎无法让它工作,我的最新代码如下。我认为当我在 submit 页面上单击 create-rating 时,它​​应该将 video_id 发送到 rating_upload ,然后我可以将它作为参数发送回 create_rating 。文档也显示了这一点。我尝试了几件事,最新的错误是我所展示的..

网址:

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 

请您参考如下方法:

尝试

return HttpResponseRedirect(reverse('create_rating', args=(video_id,))) 
代替
return HttpResponseRedirect(reverse('create_rating', video_id)) 
Documentation 建议将您的参数作为元组传递。


标签:Django
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号