Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Django Paginator (отображение результатов поиска) [RSS Feed]

#1 Дек. 1, 2011 14:39:48

Gorazio
От:
Зарегистрирован: 2011-11-20
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

Django Paginator (отображение результатов поиска)

Всем привет. Прошу направить меня на путь истинный по следующему вопросу:
-есть простенькая форма для поиска по базе:

...
<form action="/search/" method="get">
<input type="text" name="q">
<input type="submit" value="Найти">
</form>
...
-есть функция во views.py:
...
def search(request):
q = request.GET['q']
man_list = Manufact.objects.filter(naim_man__icontains=unicode(q))
paginator = Paginator(man_list, 2)
page = request.GET.get('page','1')
try:
manufacts = paginator.page(page)
except PageNotAnInteger:
manufacts = paginator.page(1)
except EmptyPage:
manufacts = paginator.page(paginator.num_pages)
return render_to_response('search_results.html',
{"manufacts": manufacts, "man_list": man_list})
-и кусок шаблона search_results.html:
...
{% for m in manufacts.object_list %}
<br>{{ m.naim_man }}</br>
{% endfor %}

<div class="pagination">
<span class="step-links">
{% if manufacts.has_previous %}
<a href="?page={{ manufacts.previous_page_number }}">Prev</a>
{% endif %}
<span class="current">
Page {{ manufacts.number }} of {{ manufacts.paginator.num_pages }}
</span>
{% if manufacts.has_next %}
<a href="?page={{ manufacts.next_page_number }}">Next</a>
{% endif %}
</span>
</div>
Разбиение на страницы происходит правильно, элементы отображаются тоже правильно, но при переходе на вторую страничку Django показывает ошибку:
MultiValueDictKeyError at /search/
"Key 'q' not found in <QueryDict: {u'page': [u'2']}>"
Подскажите пожалуйста, что не так, и как правильно отобразить результаты поиска.
Паджинацию настраивал руководствуясь этим.



Офлайн

#2 Дек. 1, 2011 18:56:03

ziro
От:
Зарегистрирован: 2009-08-13
Сообщения: 225
Репутация: +  8  -
Профиль   Отправить e-mail  

Django Paginator (отображение результатов поиска)

Паджинация здесь не при чем. Просто измените код получения параметра “q” на что-то типа такого:

q = request.GET.get('q', '')
а то питон считает что ключ “q” обязательно должен быть в GET-параметрах.



Офлайн

#3 Дек. 2, 2011 07:30:44

Gorazio
От:
Зарегистрирован: 2011-11-20
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

Django Paginator (отображение результатов поиска)

Ziro, спасибо Вам большое, теперь все ОК)



Офлайн

  • Начало
  • » Django
  • » Django Paginator (отображение результатов поиска)[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version