首页 > 解决方案 > 单输入django表单

问题描述

我试图从 django 表单中获取单个输入,但它 在 /books/f/ 处给了我错误 ValueError 视图 main.views.select_team 没有返回 HttpResponse 对象。它返回 None 。

看法

def select_team(request):
    if request.method == 'POST':
        Team.objects.create(user=request.user, total=request.POST('team_number'))
        return redirect(reverse('books', args=()))

形式

 <form action="{% url 'select_team' %}" method="post" style="display: inline;">
{% csrf_token %}
<input type="number" id="start" name="'team_number'" min="2" max="5" value="2"/>
 <label for="start">select in range of 2 to 5</label>
<button type="submit" class="btn btn-danger btn-xs">
    <span class="glyphicon glyphicon-remove"></span>&nbsp; create teams
</button>
</form>

网址

url(r'^books/f/$', views.select_team, name='select_team')

标签: djangodjango-forms

解决方案


首先,您必须在点击 url 以测试表单时呈现模板。为此使用render

return render(request, 'template_name.html')

然后抓取 POSTed 数据使用request.POST.get('team_number'). 所以你现在的看法是:

def select_team(request):
    if request.method == 'POST':
        Team.objects.create(user=request.user, total=request.POST.get('team_number'))
        return redirect(reverse('books', args=()))
    return render(request, 'template_name.html')

你是双引号name="team_number输入的属性,所以模板应该是:

<form action="{% url 'select_team' %}" method="post" style="display: inline;">
    {% csrf_token %}
    <input type="number" id="start" name="team_number" min="2" max="5" value="2"/>
    <label for="start">select in range of 2 to 5</label>
    <button type="submit" class="btn btn-danger btn-xs">
        <span class="glyphicon glyphicon-remove"></span>&nbsp; create teams
    </button>
</form>

推荐阅读