2

Modelクラスがあります。

class Search(forms.Form):
    query=forms.CharField()

そして、ビュー機能。

def search(request):
  c = {}
  c.update(csrf(request))
  if request.method == 'POST': 
    form = Search(request.POST) 
      if form.is_valid():
        search_query=form.cleaned_data['query']
            return HttpResponse("your query: %s" %search_query  , c) 
      else:
        return HttpResponse(form , c)
  else:
    return render_to_response('polls/search.html', c)

そして、これが私のsearch.htmlです:

 <form action="/polls/search" method="post">{% csrf_token %}
  <p><label for="query_label">query:</label>
    <input type="text" name="query_txt" id="query_txt_id" /></p>
  <input type="submit" value="Submit" />
 </form>

いくつかの文字を入力として指定すると、常に次の文字がプレーンテキストとして表示されます(エラーではありません)。

「サーバーエラーが発生しました。管理者に連絡してください。」

4

1 に答える 1

1

idクエリフィールドのが正しくありません。Djangoはそれがであると期待していますid_query

フォーム入力をハードコーディングする必要はありません。{{ form.as_p }}テンプレートに含めると、Djangoはフォームを正しくレンダリングします。

<form action="/polls/search" method="post">{% csrf_token %}
  {{ form.as_p }}
  <input type="submit" value="Submit" />
</form>

本当にテンプレートにフォームをハードコーディングしたい場合は、Djangoが生成する作業用HTMLから始めて、そこからカスタマイズします。テンプレートのフォームと以下のスニペットにはエラーが表示されないことに注意してください。詳細については、フォームテンプレートのカスタマイズに関するドキュメントを参照してください。

<form action="/polls/search" method="post">{% csrf_token %}
  <p><label for="id_query">Query:</label> <input type="text" name="query" id="id_query" /></p>
  <input type="submit" value="Submit" />
</form>
于 2012-11-06T10:57:21.063 に答える