我是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,
}
但是我不知道如何打电话给那个。 有人可以给我帮助(有点坚持这段时间)
亲切的问候 汉斯
答案 0 :(得分:4)
重定向到user_characters
视图的最简单方法是使用redirect
快捷方式。
from django.shortcuts import redirect
# in the view
return redirect('user_characters', user.id)
这相当于使用HttpResponseRedirect
和reverse
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