【问题标题】:Is there any way to redirect to a view from a separate view with arguments for that view function in Django?有没有办法从一个单独的视图重定向到一个视图,并在 Django 中使用该视图函数的参数?
【发布时间】:2022-01-27 00:06:10
【问题描述】:

我一辈子都找不到在 Django 中使用该视图的参数重定向到另一个视图的方法。我已经尝试过 django.shortcuts 重定向方法,但这似乎不起作用(它似乎想要为 url 模式而不是视图函数采用模式。HttpResponseRedirect 函数显然不起作用,因为该函数只是重定向到另一个网址。还有哪些其他选项?

【问题讨论】:

    标签: python django


    【解决方案1】:

    您似乎想提供使用重定向,并想提供一个很容易做到的参数

    x.order_total= total+shipping_total
            x.save()
            return redirect(f'/order/payment/{order_number}')
    

    这里我只粘贴了我的一个视图的 sn-p,如果你有匹配的 url,你可以在字符串外使用 f 插入参数,它会正常工作

    【讨论】:

    • 所以这真的是最好的方法(即通过 url 的模式匹配添加变量)?这有点令人难过,但如果这是最好的方法,那就是我必须做的。
    • 它对你有用吗?我不是说最好,这就是我所做的
    【解决方案2】:

    您可以使用不使用硬编码 url 的 reverse 使用参数重定向到其他视图,而不是使用 internally 的 url 实际上重定向的名称

    def view_one(request):
        return redirect('view_two', arg=arg)
    

    默认情况下重定向会为永久重定向做临时重定向,你必须指定它才能知道两者之间的区别看看here

    【讨论】:

    • 如果这解决了问题,您可以将其标记为已接受,如果这对未来的读者有价值,您可以投票感谢 :)
    【解决方案3】:

    您可以使用反向函数来填充您的 URL 模式 您可以使用以下行导入 reverse 函数:

    from django.core.urlresolvers import reverse
    

    如果你有这样的 URL,你可以使用反向:

    url(r'^project/(?P<project_id>\d+)/$','user_profile.views.EditProject',name='edit_project'),
    path('project/<str:project_id>/', name='edit_project'),
    

    用法:

    redirect(reverse('edit_project', kwargs={'project_id':4}))
    

    或:

    redirect(reverse('app_name:edit_project', kwargs={'project_id':4}))
    

    文档here

    【讨论】:

    • 这是最适合你的方式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    相关资源
    最近更新 更多