1

Django プロジェクト内に、CMS 管理者内で検索する単純な検索アプリがあります。これは、URL を生成するフォームです。

< form method="get" action="/search">
            < p>< label for="id_q">検索:
            < 入力タイプ="テキスト" 名前="q" id="id_q" />
            < 入力タイプ="送信" 値="送信" />< /p>
        
、これは URL です:
(r'^search/$', 'search.views.search'),
これはビューです:
デフォルト検索 (リクエスト):
    クエリ = request.GET['q']
    結果 = FlatPage.objects.filter(content__icontains=query)
    テンプレート = loader.get_template('検索/検索.html')
    context = Context({ 'クエリ': クエリ, '結果': 結果 })
    応答 = template.render(コンテキスト)
    return HttpResponse(レスポンス)
、これはテンプレートです:
<html>
    <頭>
        < title>検索ページ
    < /頭>
    <本体>
        < p>「{{ query }}」を検索しました。結果を以下に示します。< /p>
        <ul>
            {% 結果のページの %}
                < li>< a href="{{ page.get_absolute_url }}">{{ page.title }}< /a>< /li>
            {% endfor %}
        < /ul>
    < /ボディ>
< /html>
しかし、私はこのエラーを受け取り続けます:
「キー 'q' が < QueryDict: {} > に見つかりません」
. 誰かがなぜ私に何ができるのですか?

4

3 に答える 3

2

おそらく、このエラーは、最初にページをリクエストしたとき、検索語を送信する前に発生してqいると考えられます。そのため、リクエストでフィールドが見つからないことは明らかです。最初に確認する必要があります。

def search(request):
    if 'q' in request.GET:
        query = request.GET['q']
        results = FlatPage.objects.filter(content__icontains=query)
于 2011-08-07T18:54:16.407 に答える
1

結果を送信するときに request.GET を使用しています。ダニエルが言及したチェックと、代わりに POST の両方を使用します。

def search(request):
    if 'q' in request.GET:
      query = request.GET['q']
      results = FlatPage.objects.filter(content__icontains=query)
    else:
      query = ""
      results = None
    template = loader.get_template('search/search.html')
    context = Context({ 'query': query, 'results': results })
    response = template.render(context)
    return HttpResponse(response)        
于 2011-08-07T19:02:56.163 に答える
0

行を からquery = request.GET['q']に変更できますquery = request.GET.get('q')

関数に注意してくださいget()...もちろん、ここでの他の回答も機能します。この同様の質問を参照してください。

「インスタンスメソッド」オブジェクトには属性「__getitem__」がありません

于 2013-08-29T04:07:31.830 に答える