我的项目中有一种情况,我需要将用户重定向到包含参数的url(它在urls.py中声明如下:
url(r'^notamember/(?P<classname>\w+)/$',
notamember,
name='notamember'),)
如何将该参数放入返回HttpResponseRedirect?我尝试过: 返回HttpResponseRedirect('/ classroom / notamember / classname'),无论如何,这是愚蠢的,我知道,我不能将'classmane'视为参数。 为清楚起见,我的观点是:
def leave_classroom(request,classname):
theclass = Classroom.objects.get(classname = classname)
u = Membership.objects.filter(classroom=theclass).get(member = request.user).delete()
return HttpResponseRedirect('/classroom/notamember/theclass/')
如何在该网址中包含变量'theclass'? 非常感谢!
答案 0 :(得分:50)
这应该不复杂。 HttpResponseRedirect
的参数只是一个字符串,因此构建字符串的常规规则适用于此处。但是,我不认为你想要theclass
变量,因为那是ClassRoom对象,而不是字符串。你可能想要classname
。 adamk在这里给了你正确的答案。
但是,说过你可以使用一个字符串,你应该做的是使用reverse
函数。这是因为您以后可能决定更改URL结构,而不是必须查看代码,找到您对URL字符串进行硬编码的每个地方,您应该依赖于在一个地方定义它们:您的网址。 py文件。所以你应该做这样的事情:
from django.core.urlresolvers import reverse
url = reverse('notamember', kwargs={'classname': classname})
return HttpResponseRedirect(url)
答案 1 :(得分:41)
试试这个:
return HttpResponseRedirect('/classroom/notamember/%s/' % classname)
修改强>
这肯定更好(Daniel Roseman的答案):
from django.core.urlresolvers import reverse
url = reverse('notamember', kwargs={'classname': classname})
return HttpResponseRedirect(url)
答案 2 :(得分:4)
实际上,快捷方式redirect
也会获取视图名称和模型(定义了get_absolute_url
个名称)。
from django.shortcuts import redirect
return redirect(leave_classroom)
答案 3 :(得分:0)
当一切似乎都无法正常工作时,我使用return render并检查是否为发布请求,以防有人刷新页面
if request.POST:
message = "Thank you."
return render(request, 'index.html', locals())
return HttpResponseRedirect('/')
local()使参数在模板上可访问
答案 4 :(得分:0)
如果要提交到相同的URL,则可以使用以下内容传递参数。
template_name = '/classroom/notamember.html'
return render(
request,
self.template_name,
{'classname': 'classname', 'secondvariable': 'variable' }
)