【问题标题】:How can I redirect from view In Django如何在 Django 中从视图中重定向
【发布时间】:2017-03-05 21:20:28
【问题描述】:

这是在 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)

【问题讨论】:

    标签: python django


    【解决方案1】:

    正如@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)
    

    阅读更多关于重定向 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

    【讨论】:

      【解决方案2】:

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

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

      这是官方文档的link

      【讨论】:

        猜你喜欢
        • 2019-12-20
        • 1970-01-01
        • 1970-01-01
        • 2018-05-20
        • 2011-09-21
        • 2016-06-28
        • 2015-11-01
        • 2016-02-11
        相关资源
        最近更新 更多