如何在 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)

原文由 Self 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

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

 from django.shortcuts import redirect

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

这是官方文档的 链接

原文由 mdegis 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

 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)

在此处此处 阅读有关重定向的更多信息

您可以使用 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}))

更多关于反向 在这里

原文由 Hmatrix 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题