django HttpResponseRedirect 和 ABSOLUTE_URL_OVERRIDES

Han*_*ong 2 django url reverse

我是 django (1.5.1) 的新手,对 HttpResponseRedirect 有点困惑。如果我理解正确,需要一个静态字符串,并且当您希望它动态重定向时,您会得到一个reverse()或一个get_absolute_url()我想我得到了get_absolute_url的部分,但我坚持重定向到以下内容url(第一个是mysite.urls.py,第二个是我的characters.view.py

url(r'^users/', include('characters.urls')),
url(r'^(?P<user_id>\d+)/characters/$', views.user_characters, name='user_characters'),
Run Code Online (Sandbox Code Playgroud)

从这个观点来看:

if new_char_form.is_valid():
    #save form with commit=False
    new_char_obj = new_char_form.save(commit=False)
    #set user and save
    new_char_obj.user = user
    new_char_obj.save()

    return HttpResponseRedirect('%s/characters/' % user.id)
Run Code Online (Sandbox Code Playgroud)

所以我知道我不能那样使用 HttpResponseRedirect,并且由于我不能在用户模型中包含 get_absolute_url 函数,所以我找到了下一个选项。

将此包含在我的设置中

ABSOLUTE_URL_OVERRIDES = {
'auth.users': lambda o: "/users/%s/" % o.id,
}
Run Code Online (Sandbox Code Playgroud)

但后来我不知道如何呼吁这一点。有人可以给我帮助吗(在这个问题上停留了一段时间)

谨致问候汉斯

Ala*_*air 5

重定向到user_characters视图的最简单方法是使用redirect快捷方式。

from django.shortcuts import redirect

# in the view
return redirect('user_characters', user.id)
Run Code Online (Sandbox Code Playgroud)

这相当于使用HttpResponseRedirectandreverse

from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse

# in the view
return HttpResponseRedirect(reverse('user_characters', args=[user.id]))
Run Code Online (Sandbox Code Playgroud)

如果您想使用ABSOLUTE_URL_OVERRIDES覆盖模型get_absolute_url的方法User,则必须确保 url 与名为 的视图的格式匹配user_characters

ABSOLUTE_URL_OVERRIDES = {
    'auth.users': lambda o: "/users/%s/characters/" % o.id,
}
Run Code Online (Sandbox Code Playgroud)

然后你就可以提出user.get_absolute_url()你的观点,并做

return HttpResponseRedirect(user.get_absolute_url())
Run Code Online (Sandbox Code Playgroud)

或者,因为redirect快捷方式允许您传递模型实例:

return redirect(user)
Run Code Online (Sandbox Code Playgroud)