Django使用参数将HttpResponseRedirect返回到url

Django使用参数将HttpResponseRedirect返回到url,django,url,httpresponse,urlvariables,Django,Url,Httpresponse,Urlvariables,在我的项目中,我需要将用户重定向到包含参数的url,该参数在url.py中声明,如下所示: url(r'^notamember/(?P<classname>\w+)/$', notamember, name='notamember'),) 无论如何,这是愚蠢的,我知道,我不能把等级> 作为参数。 为清楚起见,我的视图.py是: def leave_classroom(req

在我的项目中,我需要将用户重定向到包含参数的
url
,该参数在url.py中声明,如下所示:

url(r'^notamember/(?P<classname>\w+)/$', 
                           notamember,
                           name='notamember'),)

无论如何,这是愚蠢的,我知道,我不能把<强>等级> <强>作为参数。 为清楚起见,我的视图.py是:

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/')
如何在
url
中包含变量class? 非常感谢

试试这个:

return HttpResponseRedirect('/classroom/notamember/%s/' % classname)
编辑:

这当然更好(丹尼尔·罗斯曼的回答):


这并不复杂。
HttpResponseRedirect
的参数只是一个字符串,因此构建字符串的常规规则适用于此处。但是,我认为您不希望在其中包含
class
变量,因为这是一个教室对象,而不是字符串。您可能希望使用
classname
。阿达姆克在这里给了你正确的答案

但是,尽管您已经说过可以只使用字符串,但实际上您应该使用
reverse
函数。这是因为您以后可能会决定更改URL结构,而不必通过代码查找每个硬编码URL字符串的位置,您应该依赖于在一个位置定义它们:您的URL.py文件。所以你应该这样做:

from django.core.urlresolvers import reverse

url = reverse('notamember', kwargs={'classname': classname})
return HttpResponseRedirect(url)

实际上,快捷方式
redirect
也包含视图名称和模型(定义了
get\u absolute\u url
名称)

from django.shortcuts import redirect

return redirect(leave_classroom)

当一切似乎都不工作时,我使用returnrender并检查它是否是post-request,以防有人刷新页面

if request.POST:
    message = "Thank you."
    return render(request, 'index.html', locals())
return HttpResponseRedirect('/')

local()使参数在模板上可访问

如果提交到同一URL,则可以使用以下方法传递参数

 template_name = '/classroom/notamember.html'

return render(
                request,
                self.template_name,
                {'classname': 'classname', 'secondvariable': 'variable' }
            )

六羟甲基三聚氰胺六甲醚。。。它似乎不起作用-类名仍然没有出现在url中:(查看
notalmember
有什么作用?只允许用户访问非成员可用的资源。其签名是def notalmember(请求,类名):从您包含的url.py中,我了解到您希望当用户转到127.0.0.1:8000/notalmember/myclass/时,浏览器将重定向到127.0.0.1:8000/school/notalmember/myclass/?Daniel的答案比这个好得多。url.py中的url可能会在以后更改。使用此方法,您必须找到所有位置如果使用reverse(),它将自动发生。有趣!从现在起,我将对URL使用reverse函数。谢谢!
if request.POST:
    message = "Thank you."
    return render(request, 'index.html', locals())
return HttpResponseRedirect('/')
 template_name = '/classroom/notamember.html'

return render(
                request,
                self.template_name,
                {'classname': 'classname', 'secondvariable': 'variable' }
            )