2012-05-02 6 views
0

Я пытаюсь использовать Pagination в моем простом приложении поиска и отображения, написанном на Django.Данные не передаются с методом GET

Я пошел по учебнику по Pagination из Djangoproject, но на сервер не отправляются данные.

Я использовал pdb.set_trace() для просмотра вывода кода, а словарь GET пуст.

Вот код в шаблоне, и файл URLs:

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"),) 

и мнение о том, работает с этим, 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}) 

Почему данные не отправляются? Я также прочитал другие сообщения, и решения там не сработали для меня. Они предложили получить доступ к значению «q_word» в словаре GET либо request.GET.get('q_word'), либо request.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-адресе на странице поиска? – 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

Ошибка: 'Невозможно использовать None в качестве значения запроса'. Кажется, данные все еще не проходят. И, кстати, URL-адрес: http: //127.0.0.1: 8000/search/', ничего больше не добавлено. –

+0

@reos Проблема заключается в том, что [QueryString] (http://en.wikipedia.org/wiki/Query_string) не добавляется к вашему URL-адресу. Если бы вы получили его в свой объект запроса 'request'. В синтаксисе формы что-то не так, правильно ли работает тег 'trans'? Что делать, если вы удалите 'trans'? Просто экспериментирование ... –

+0

Точно, я это вижу, но я пытаюсь выяснить, есть ли проблема с кодом или нет. Я пытаюсь сузить его. –

Смежные вопросы