Django重定向时传递一个(或多个)对象作为参数

2 投票
2 回答
1356 浏览
提问于 2025-04-17 17:18

背景:我有三个应用程序,分别是 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 文件中:

A 应用的路由配置是:

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 应用的正确方法,并传入新的参数……有没有办法可以做到这一点?

我尝试了一种新手的方法,但遇到了一个 SuspiciousOperation 异常(“不安全的重定向到 URL,带有方案...”)。

重要提示:我还有一个名为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 是一个对象!!!!而不是一个文本值!<<<<<<<<<

2 个回答

0
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)

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。

0

我觉得你可能需要在调用 reverse() 的时候指定命名空间,因为你父应用的 urls.py 文件里定义了这些命名空间。

可以在 这里 查看相关内容:

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

撰写回答