【问题标题】:Creating forms with method="get" in django在 django 中使用 method="get" 创建表单
【发布时间】:2016-03-23 04:31:56
【问题描述】:

我有一个包含两种文本输入类型的表单。两个表单的值都传递到视图myfunc,然后传递到另一个模板。表单结果的 url 应该是

/app/1/new_page/?key=key&value=value

但在提交表单时,它会转到以下网址 -

/app/1/new_page/?csrfmiddlewaretoken=CpYebRXTmLkHfo6hRQSrfZPdMFjWW9Ri&key=a1&value=41325

并给出错误 -

Exception Type:     TemplateDoesNotExist
Exception Value:    <WSGIRequest: GET '/app/1/new_page/?csrfmiddlewaretoken=CpYebRXTmLkHfo6hRQSrfZPdMFjWW9Rikey=a1&value=41325'>

即使手动输入正确的网址也会得到相同的Exception Type and Value

但是我已经在视图中声明了模板。这里可能是什么问题?

template containing form

<form action="{% url 'my_func' id %}" method="GET">
    {% csrf_token %}
    <input id="key" type="text" name="key" value="">
    <input id="value" type="text" name="value" value="">
    <input type="submit" value="Submit" />
</form>

views.py

def myfunc(request, id):
    key = request.GET.get('key')
    value = request.GET.get('value')
    context = {'key': key}
    return render_to_response(request,'template.html', context)

urls.py

url(r'^app/(?P<id>\d+)/new-page/$', views.myfunc, name="my_func"),

【问题讨论】:

  • TemplateDoesNotExist,您缺少文件template.html
  • 没有文件。因为另一个视图正在访问同一个模板。错误是TemplateDoesNotExist at /app/1/new_page/ 回溯甚至没有提到模板文件。

标签: python django forms django-templates django-views


【解决方案1】:

这与表单或 GET 无关。

您使用了render_to_response 快捷方式,它接受两个位置参数:模板和上下文。但是你已经传递了三个参数,把请求放在第一位;该快捷方式不接受请求。

我认为您的意思是只使用 render 快捷方式,确实首先接受请求。

return render(request,'template.html', context)

【讨论】:

  • 为什么csrfmiddlewaretoken=CpYebRXTmLkHfo6hRQSrfZPdMFjWW9Ri&amp; 部分会附加到url?是因为csrf 令牌吗?
  • 是的;它在表单中,因此与其余数据一起提交。 GET 提交不需要它,你可以完全省略标签。
猜你喜欢
  • 2016-02-04
  • 2018-08-22
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-09
  • 2015-01-06
相关资源
最近更新 更多