在我的Django支持的网站上,我有一个包含多个可选字段的搜索页面。该搜索页面是一个Django的形式,我认为功能是典型的:请勿在Django表单发出的GET请求中包含空白字段
def search(request):
form = SearchForm(request.GET or None)
if form.is_valid():
return form.display_results(request)
return render(request, 'search.html', {'form': form})
Form.display_results()使用提供查询数据库,并呈现一个响应的字段。我search.html包括:
<form action="/search/" method="get">{% csrf_token %}
<!-- Render the form fields -->
<input type="submit" value="Search" />
<input type="reset" value="Reset form" />
</form>
由于大多数的搜索会存在空白字段,我想没有将其包括在上search.html提交按钮发出GET请求。当前的搜索看起来像:
http://mysite/search/?csrfmiddlewaretoken=blah&optional_field1=&optional_field2=&optional_field3=oohIWantThisOne
而且我想他们是这样的:
http://mysite/search/?csrfmiddlewaretoken=blah&optional_field3=oohIWantThisOne
当然,我有几个领域。这样做会很好,因为它可以使搜索URL更容易人为分析和共享。
此方法的问题是,如果表单由于某种原因(例如验证)未提交,则这些输入将消失。也许你可以直接将函数附加到'submit'方法。 –
右键 - 浏览器在窗体上提交所有成功的控件(http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2),所以这个工作的唯一方法是使用Javascript某种方式去除或停用不必要的控制。另外请注意,如果您打算传递这些URL,您实际上不希望您的CSRF令牌存在于其中。 GET请求忽略CSRF令牌,但它仍然是不必要的,也是不好的做法。 –
我真的认为其他解决方案,发布表单,更清洁。 –