如何从视图重定向在Django中

时间:2017-03-05 21:20:28

标签: python django

这是为Django中的帖子应用编写的视图。问题是填写更新表单并提交后发生成功。但它会给用户造成混淆,因为那里有相同的HTML页面,如何重定向到更新的对象?

def post_update(request,id=None):
    instance=get_object_or_404(Post,id=id)
    if instance.created_user != request.user.username :
        messages.success(request, "Post owned by another user, You are having read permission only")
        return render(request,"my_blog/denied.html",{})
    else :  
        form=PostForm(request.POST or None,request.FILES or None,instance=instance)
        if form.is_valid():
            instance=form.save(commit=False)
            instance.save()
        context={ "form":form,
                  "instance":instance }

        return render(request,"my_blog/post_create.html",context)

THANKYOU。

2 个答案:

答案 0 :(得分:9)

您可以使用http快捷方式中的redirect

from django.shortcuts import redirect

def my_view(request):
    ...
    object = MyModel.objects.get(...)
    return redirect(object) #or return redirect('/some/url/')

以下是官方文档的link

答案 1 :(得分:9)

正如@mdegis已经建议的那样,您可以使用Django重定向功能重定向到另一个视图或网址。

from django.shortcuts import redirect

def view_to_redirect_to(request):
    #This could be the view that handles the display of created objects"
    ....
    perform action here
    return render(request, template, context)

def my_view(request):
    ....
    perform form action here
    return redirect(view_to_redirect_to)

详细了解重定向herehere

您可以使用reverse()方法和您要重定向到的视图的指定url将位置或关键字参数传递到重定向快捷方式。

在urls.py

from news import views

url(r'^archive/$', views.archive, name='url_to_redirect_to')

在views.py

from django.urls import reverse

def my_view(request):
    ....
    return redirect(reverse('url_to_redirect_to', kwargs={'args_1':value}))

有关反向Here

的更多信息