【问题标题】:Django Redirecting passing one (or more) object(s) as argument(s)Django重定向传递一个(或多个)对象作为参数
【发布时间】:2013-02-13 06:22:21
【问题描述】:

上下文:我有 3 个应用程序 A、B、C

每个都有views.py和urls.py文件

views.py

A有do_Ax(request, xpto), do_Ay(request, xpto), do_Az(request, xpto)

B有do_Bx(request)、do_By(request)、do_Bz(request)

C有do_Cx(request, xpto), do_Cy(request, xpto), do_Cz(request, xpto)

urls.py 一个

urlpatterns = patterns('',
                       url(r'^A_x/$', views.do_Ax, name='A_x'),
                       url(r'^A_y/$', views.do_Ay, name='A_y'),
                       url(r'^A_z/$', views.do_Az, name='A_z'),

B

urlpatterns = patterns('',
                       url(r'^B_x/$', views.do_Bx, name='B_x'),
                       url(r'^B_y/$', views.do_By, name='B_y'),
                       url(r'^B_z/$', views.do_Bz, name='B_z'),

C

urlpatterns = patterns('',
                       url(r'^C_x/$', views.do_Cx, name='C_x'),
                       url(r'^C_y/$', views.do_Cy, name='C_y'),
                       url(r'^C_z/$', views.do_Cz, name='C_z'),

我的全局应用程序的入口点是通过 B。在那里,我检查了一些东西,并希望使用新参数重定向到 A 或 C 视图的正确方法... 有没有办法我可以做到这一点?

我尝试了一种 n00b 方法,但我得到了一个 SuspiciousOperation 异常(“Unsafe redirect to URL with scheme ...”)

重要提示: 我还有一个名为 top 的“父”应用程序,它具有以下 urls.py:

urlpatterns = patterns('',
    url(r'^A/', include('apps.top.A.urls', namespace="A")),
    url(r'^B/', include('apps.top.B.urls', namespace="B")),
    url(r'^C/', include('apps.top.C.urls', namespace="C")),
)

请注意 >>>> XPTO 是一个对象!!!!不是文本值!

【问题讨论】:

    标签: python django url redirect


    【解决方案1】:
    from django.core.urlresolvers import reverse
    from django import shortcuts
    
    def do_Bx(request):
        # do some tests here and whatever
        xpto = whatever
        url = reverse("A_x", args=[xpto])
        return shortcuts.redirect(url)
    

    【讨论】:

    • 当你回答时我正在编辑.. 我接近你的方法,会试一试。谢谢:)
    • Django 似乎没有找到 A(或 C)应用程序......它看起来很简单但我没能做到这一点......顺便说一下 A、B 和 C 都是“子”应用程序的顶部并且都是 3 在同一个“级别”
    • 异常:“A_x”的反向参数“((),)”和关键字参数“{}”未找到。
    【解决方案2】:

    我认为您可能需要在 reverse() 调用中指定命名空间,因为您的父应用的 urls.py 定义了它们:

    如见here:

    url = reverse('A:A_x', args=[xpto])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-20
      • 1970-01-01
      • 2016-06-28
      相关资源
      最近更新 更多