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)
但后来我不知道如何呼吁这一点。有人可以给我帮助吗(在这个问题上停留了一段时间)
谨致问候汉斯
重定向到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)
| 归档时间: |
|
| 查看次数: |
1641 次 |
| 最近记录: |