在我的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令牌,但它仍然是不必要的,也是不好的做法。 –
我真的認爲其他解決方案,發佈表單,更清潔。 –