django HttpResponseRedirect和ABSOLUTE_URL_OVERRIDES

时间:2013-11-19 17:57:07

标签: 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'),

从这个观点来看:

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)

所以我知道我不能以这种方式使用HttpResponseRedirect,因为我不能在用户模型中包含get_absolute_url函数,所以我找到了下一个选项。

在我的设置中包含此内容

ABSOLUTE_URL_OVERRIDES = {
'auth.users': lambda o: "/users/%s/" % o.id,
}

但是我不知道如何打电话给那个。 有人可以给我帮助(有点坚持这段时间)

亲切的问候 汉斯

1 个答案:

答案 0 :(得分:4)

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

from django.shortcuts import redirect

# in the view
return redirect('user_characters', user.id)

这相当于使用HttpResponseRedirectreverse

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

# in the view
return HttpResponseRedirect(reverse('user_characters', args=[user.id]))

如果您想使用ABSOLUTE_URL_OVERRIDES覆盖get_absolute_url模型的User方法,则必须确保该网址与名为{{1}的视图的格式相匹配}。

user_characters

然后,您就可以在视图中调用ABSOLUTE_URL_OVERRIDES = { 'auth.users': lambda o: "/users/%s/characters/" % o.id, } ,然后执行

user.get_absolute_url()

或者,因为return HttpResponseRedirect(user.get_absolute_url()) 快捷方式允许您传递模型实例:

redirect