1

用户通过复选框选择一个插槽,还应该输入一个用户名,如下面的模板所示:

<form action="/clubs/{{ club.id }}/vote/" method="post">
{% csrf_token %}
{% for slot in tom_open_slots %}
    <input type="checkbox" name="slot" id="slot{{ forloop.counter }}" value="{{ slot.id }}" />
    <label for="slot{{ forloop.counter }}">{{ slot.slot }} on Court {{slot.court}}</label><br />
{% endfor %}    
<input type="text" name="username" />
<input type="submit" value="Reserve" />

然后我想显示在复选框中输入的用户名和时间。我通过下面的视图和模板执行此操作:

def vote(request, club_id):
    if 'username' in request.GET and request.GET['username'] and 'slot' in request.GET and request.GET['slot']:
        username = request.GET['username']
        slot = request.GET['slot']
        return render_to_response('reserve/templates/vote.html',{'username':username, 'slot':slot})
    else:
        return HttpResponse('Please enter a username and select a time.')


{{slot}}
{{username}}

但是,当我转到 vote.html 时,我总是会收到错误消息(请输入用户名并选择时间)。没有获取 2 个 GET 参数的视图中有什么不正确的?

4

2 回答 2

2

您在表单中使用POST请求:

<form action="/clubs/{{ club.id }}/vote/" method="post">

但在视图中,您正在检查GET来自GET请求的对象:

request.GET

将您的表单方法更改为method="get"以解决问题。

编辑:在此处阅读有关GETvsPOST请求的更多信息:您何时使用 POST 以及何时使用 GET?

于 2012-05-23T03:17:44.393 回答
1

在 Django 中,HttpRequest 对象具有三个字典,它们为您提供请求参数:

  • request.GET为您提供查询字符串参数,

  • request.POST为您提供发布数据,以及

  • request.REQUEST给你两个。

在您的情况下,由于表单正在使用该POST方法,因此您应该使用request.POSTor request.REQUEST

仅供参考:https ://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.GET

于 2012-05-23T03:20:47.433 回答