2

我有一个应用程序可以提供这样的页面 /stage/ stagename舞台名称是可变的。URL 映射器只是寻找 [0-9A-Za-z]+ 来填充该位置。

现在,由于我的设置,我的应用程序将植根于 /stage/ stagename。我无法更改此设置(无需对我的设置进行大量更改,这现在太乏味了,也是最后的选择)。

我需要使用django.contrib.auth. 登录和注销 URL 不能在我的设置文件中,因为它们会根据我的应用程序的根目录而改变(一种可能是 /stage/foo/login,另一种可能是 /stage/bar/login )。

如何让后端使用这样的动态 URL?

我还有一个问题,我需要将stagename参数传递给生成我的 URL 的模板。我怎样才能做到这一点?

4

2 回答 2

1

如果您可以redirect_to进入登录模板的上下文,那么您可以使用一种机制来选择不同的重定向 URL。

在您的登录模板中,向表单添加一个额外的隐藏输入

<input type="hidden" name="next" value="{% url redirect_to %}">

现在在您的 urls.py 文件中,您可以指定用于重定向的输入:

url(r'^login/$',
    auth_views.login,
    {'template_name': 'registration/login.html',
     'redirect_field_name': 'next'},
    name='auth_login'),

如果你这样做,那么你将被重定向到不同的地方,具体取决于redirect_to.

您可以redirect_to通过拥有多个命名登录 url 来进入您的上下文:

url(r'^login/$',
    auth_views.login,
    {'template_name': 'registration/login.html',
     'redirect_field_name': 'next',
     'extra_context': {'redirect_to': 'foo_url'}
    },
    name='foo_login'),

url(r'^login/$',
    auth_views.login,
    {'template_name': 'registration/login.html',
     'redirect_field_name': 'next',
     'extra_context': {'redirect_to': 'bar_url'}
    },
    name='bar_login'),

或者如果你不想做那种事情,你可以在会话中使用一些东西:

<input type="hidden" name="next" value="{% url session.redirect_to %}">

希望这会有所帮助,如果代码中存在拼写错误,我们深表歉意!auth login 视图的文档很难链接到link。转到该链接并向上滚动一下!

于 2011-08-27T01:56:12.347 回答
0

/stage/foo/login 和另一个,它可能是 /stage/bar/login)。

url( r'^stage/(?P<name>[^/]+)/login/$', some_view_function )

可能是你正在寻找的。

但是,您似乎有比这更大的问题。“对我的设置进行了巨大的更改,这太乏味了”表明存在更严重和根本的问题。

于 2010-10-25T11:01:24.147 回答