Django使用参数返回HttpResponseRedirect到一个url

kpbwa7wx  于 2023-02-17  发布在  Go
关注(0)|答案(5)|浏览(170)

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

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

我如何将该参数放入返回的HttpResponseRedirect中?我尝试如下:

return HttpResponseRedirect('/classroom/notamember/classname')

无论如何,这是愚蠢的,我知道,我不能把classmane作为一个参数。为了清楚起见,我的view.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中包含变量theclass呢?非常感谢!

b1uwtaje

b1uwtaje1#

这并不复杂。HttpResponseRedirect的参数只是一个字符串,因此构建字符串的常规规则在这里适用。但是,我认为您不需要theclass变量,因为它是一个ClassRoom对象,而不是字符串。您可能需要classname。adamk在这里给了您正确的答案。
不过,我们已经说过可以只使用字符串,但实际上应该使用reverse函数,因为您以后可能会决定更改URL结构,因此不必遍历代码查找每个硬编码URL字符串的位置,而应该在一个位置定义它们:您的urls.py文件。因此,您应该执行以下操作:

from django.urls import reverse

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

watbbzwu2#

试试这个:

return HttpResponseRedirect('/classroom/notamember/%s/' % classname)

编辑:

这样肯定更好(丹尼尔·罗斯曼的回答):

from django.core.urlresolvers import reverse

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

dy2hfwbg3#

实际上,快捷方式redirect也使用视图名称和模型(定义了get_absolute_url)名称。

from django.shortcuts import redirect

return redirect(leave_classroom)
2guxujil

2guxujil4#

当一切似乎都不工作,我使用返回渲染,并检查它是否是后请求的情况下,任何人刷新页面

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

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

q1qsirdb

q1qsirdb5#

如果要提交到同一个URL,则可以使用以下命令传递参数。

template_name = '/classroom/notamember.html'

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

相关问题