2012-05-02 12 views
0

私はDjangoで書かれた簡単な検索および表示アプリケーションでページネーションを使用しようとしています。GETメソッドでデータが送信されない

DjangoprojectのPaginationのチュートリアルに従っていますが、サーバーに送信されるデータはありません。

私はpdb.set_trace()を使用してコードの出力を表示しました。GET辞書は空です。

results.html:

<form method="GET" id="searchForm" action="/search/"> 
     <input type="text" id="billSearched" name="q_word"> 
     <input type="submit" value="{% trans "Look for" %}"> 
</form> 

urls.py:

urlpatterns = patterns('', 
    url(r'^$','ps.views.bills',name="bills"), 
    url(r'^i18n/', include('django.conf.urls.i18n')), 
    url(r'^search/','ps.views.search',name="search"),) 

とビューここ

は、テンプレート内のコードとURLsファイルですこれで動作します。search.py​​:

def search(request): 
    import pdb 
    pdb.set_trace() 
    searchTerm = request.GET.get('q_word') 
    if searchTerm == None: 
     searchTerm = "test" 
    found_bills = Bill.objects.filter(name__icontains = searchTerm) 
    page = request.GET.get('page') 
    paginator = Paginator(found_bills,25) 
    try: 
     current_page = paginator.page(page) 
    except PageNotAnInteger: 
     current_page = paginator.page(1) 
    except (EmptyPage, InvalidPage): 
     current_page = paginator.page(paginator.num_pages) 
return render(request,'results.html',{"results":current_page,"term": searchTerm}) 

データが送信されないのはなぜですか?私は他の記事も読んでいて、そこの解決策は私には役に立たなかった。彼らはrequest.GET.get('q_word')またはrequest.GET['q_word']でGET辞書の 'q_word'値にアクセスするように提案し、その答えによってうまくいくはずですが、私にとってはそうではありません。

私の間違いはどこですか?事前にどうもありがとうございました!

UPDATE:

[02/May/2012 14:03:59] "GET/HTTP/1.1" 200 39694 
Traceback (most recent call last): 
    File "/home/radu/projects/psdemo/.venv/local/lib/python2.7/site-packages/django/core/servers/basehttp.py", line 284, in run 
    self.finish_response() 
    File "/home/radu/projects/psdemo/.venv/local/lib/python2.7/site-packages/django/core/servers/basehttp.py", line 324, in finish_response 
    self.write(data) 
    File "/home/radu/projects/psdemo/.venv/local/lib/python2.7/site-packages/django/core/servers/basehttp.py", line 403, in write 
    self.send_headers() 
    File "/home/radu/projects/psdemo/.venv/local/lib/python2.7/site-packages/django/core/servers/basehttp.py", line 467, in send_headers 
    self.send_preamble() 
    File "/home/radu/projects/psdemo/.venv/local/lib/python2.7/site-packages/django/core/servers/basehttp.py", line 385, in send_preamble 
    'Date: %s\r\n' % http_date() 
    File "/usr/lib/python2.7/socket.py", line 324, in write 
    self.flush() 
    File "/usr/lib/python2.7/socket.py", line 303, in flush 
    self._sock.sendall(view[write_offset:write_offset+buffer_size]) 
error: [Errno 32] Broken pipe 

---------------------------------------- 
Exception happened during processing of request from ('127.0.0.1', 59087) 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/SocketServer.py", line 284, in _handle_request_noblock 
    self.process_request(request, client_address) 
    File "/usr/lib/python2.7/SocketServer.py", line 310, in process_request 
    self.finish_request(request, client_address) 
    File "/usr/lib/python2.7/SocketServer.py", line 323, in finish_request 
    self.RequestHandlerClass(request, client_address, self) 
    File "/home/radu/projects/psdemo/.venv/local/lib/python2.7/site-packages/django/core/servers/basehttp.py", line 570, in __init__ 
    BaseHTTPRequestHandler.__init__(self, *args, **kwargs) 
    File "/usr/lib/python2.7/SocketServer.py", line 641, in __init__ 
    self.finish() 
    File "/usr/lib/python2.7/SocketServer.py", line 694, in finish 
    self.wfile.flush() 
    File "/usr/lib/python2.7/socket.py", line 303, in flush 
    self._sock.sendall(view[write_offset:write_offset+buffer_size]) 
error: [Errno 32] Broken pipe 
---------------------------------------- 
+0

'?q_word = ...'はあなたのURLの 'search'ページにありますか? – DrTyrsa

+0

フォームを送信した後、URLが '?q_word = search_term'で終わることを確認してください。 –

+0

いいえ、URLには何も追加されません。私は最近Udacityチュートリアルを作成しましたが、ここではうまくいきません。 –

答えて

1

問題は、あなたが提出したときにクエリパラメータをURLの末尾に追加されていないことです。フォームを送信する際

<form id="searchForm" method="GET" action="/search/"> 
<fieldset> 
<input type="text" id="billSearched" name="q_word"> 
<br /> 
<input type="submit" value="{% trans "Look for" %}"> 
</fieldset> 
</form> 

これはあなたのURLが?q_word=search_termで終わらせる必要があります:私は、フォームのために、この構文を使用することをお勧め。

urls.pyは正常です。

+0

エラー:「クエリ値として「なし」を使用できません。まだデータが流れていないようです。そしてbtw、URLは 'http://127.0.0.1:8000/search /'です。それ以外は何も追加されません。 –

+0

@reos問題は、[QueryString](http://en.wikipedia.org/wiki/Query_string)がURLに追加されていないことです。それがあった場合は、ビューの 'request'オブジェクト内でそれを受け取ります。フォーム構文に何か問題があります、 'trans'タグが正しく動作していますか? 'trans'を削除すればどうなりますか?ちょうど実験しています... –

+0

正確には、私はそれを見ることができますが、コードに問題があるかどうかを調べようとしています。私はそれを絞り込もうとしています。 –

関連する問題