Django使用kwargs重定向到其他app中的url

时间:2016-03-18 22:57:06

标签: django

我试图通过转到login-redirect页面来登录用户,然后重定向到用户个人资料页面。我知道这不是第一次提出这个问题,但我已经尝试了所有其他答案,我不知道为什么这对我不起作用。

urls.py

urlpatterns = [
    url(r'^login/$', auth_views.login, {'template_name': 'login.html'}, name="login"),
    url(r'^login/redirect/$', account_redirect, name="account-redirect"),
    url(r'^logout/$', auth_views.logout, {'next_page': 'home'}, name="logout"),
    url(r'^stores/', include('stores.urls', namespace='store_app'))
]

views.py

def account_redirect(request):
    # tried both to see if it would help...
    # return HttpResponseRedirect(reverse('store_app:account-landing', kwargs= {"pk":request.user.pk,"name":request.user.vendor.name}))
    return redirect('store_app:account-landing', pk=request.user.pk, name=slugify(request.user.vendor.name))

存储/ urls.py

urlpatterns = [
    url(r'^account/(?P<pk>\d+)/(?P<name>\w+)/$', AccountLanding.as_view(), name="account-landing" ),
]

根据相关问题的其他几个答案,这应该可行,但事实并非如此。登录并转到login/redirect/后,我收到以下错误:

Reverse for 'account-landing' with arguments '()' and keyword arguments '{'pk': 1, 'name': u'Fake Company'}' not found. 1 pattern(s) tried: [u'stores/account/(?P<pk>\\d+)/(?P<name>\\w+)/$']

我不明白,它正在尝试正确的模式并且有正确的论据?那么为什么它不起作用?

1 个答案:

答案 0 :(得分:1)

slugify倾向于将空格转换为连字符,因此您可能需要将其包含在您的网址中

^account/(?P<pk>\d+)/(?P<name>[\w-]+)/$

注意:如果假冒公司&#39;是示例数据或您显示的错误是从您使用注释掉的行时出现的错误

slugify之所以这样做是因为url不能包含空格,而是会变成%20,这看起来很难看。