Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 如何在处理表单获取NoReverseMatch错误后重定向到其他视图_Django_Redirect_Django Views - Fatal编程技术网

Django 如何在处理表单获取NoReverseMatch错误后重定向到其他视图

Django 如何在处理表单获取NoReverseMatch错误后重定向到其他视图,django,redirect,django-views,Django,Redirect,Django Views,我正在制作一个博客应用程序,我想在处理表单后重定向到不同的url,但是下面给出的视图不起作用。我既不能使用HttpResponseRedirect,也不能简单地重定向 @login_required def blog_form(request,author_id=None,slug=None): context_instance=RequestContext(request) # This view will have a valid creator_id and slug

我正在制作一个博客应用程序,我想在处理表单后重定向到不同的url,但是下面给出的视图不起作用。我既不能使用HttpResponseRedirect,也不能简单地重定向

@login_required
def blog_form(request,author_id=None,slug=None):

    context_instance=RequestContext(request)

    # This view will have a valid creator_id and slug field if the
    # blog is being edited and in this case the creator and user should be same
    if ( author_id and slug):
        author = User.objects.get(pk=author_id)
        blog = get_object_or_404(Entry, creator = author, slug = slug)
        if blog.creator != request.user:
            raise HttpResponseForbidden()

    # We set the user and created date and make a new object
    else:
        blog = Entry(creator=request.user,created_date=datetime.datetime.now() )

    if request.method == 'POST':

        #if the blog is not published
        if 'save' in request.POST:
            form = EntryForm(request.POST, instance = blog)
            if form.is_valid():
                form.save()

        elif 'publish' in request.POST:
            blog.pub_date = datetime.datetime.now()
            blog.status = 1
            form = EntryForm(request.POST, instance = blog)
            if form.is_valid():
                form.save()
                #return HttpResponseRedirect ('view_blog', (),{'author_id':blog.creator.id,'slug' :blog.slug,})
                return redirect ('blogs', blog.creator.id, blog.slug)
                #return render_to_response('blog/blog_view.html', {'blog': blog,},context_instance=RequestContext(request))

        elif 'preview' in request.POST: 
            form = EntryForm(request.POST, instance = blog)
            if form.is_valid():
                form.save()
                return render_to_response('blog/blog_view.html', {'blog': blog,},context_instance=RequestContext(request))

    else:
        form = EntryForm(instance = blog)

    return render_to_response('blog/blog.html', {'form':form}, context_instance)

但是,如果我只使用render_to_响应,那么它可以正常工作,但这不会更改顶部的url。我想要的是在发布帖子后将用户重定向到一个新页面,我还想更改顶部的url

使用HttpResponseRedirect是一种方法,但您需要将其与reverse结合使用:

from django.core.urlresolvers import reverse

### your other code
return HttpResponseRedirect(reverse('view_blog', args=(),
    kwargs={'author_id': blog.creator.id,'slug': blog.slug}))

希望这能帮到你。

非常感谢。。实际上,他们在返回HttpResponseRedirect(reverse('polls.views.results',args=(p.id,))的文档中给出了这一点,这也引发了一个错误。。。非常感谢你的帮助