Django重定向时传递一个(或多个)对象作为参数
背景:我有三个应用程序,分别是 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])