Django: объединение поискового представления с нумерацией страниц
В Django CBV (ListView) после отправки формы методом GET filter_1
а также filter_2
поля, результирующий URL, который я получаю что-то вроде
http://example.com/order/advanced-search?filter_1=foo&filter_2=bar
Все отлично. Тем не менее, я бы хотел использовать нумерацию страниц, чтобы в моем шаблоне был такой URL:
http://example.com/order/advanced-search?page=2&filter_1=foo&filter_2=bar
Допустим, я мог переопределить этот метод для этой цели:
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['my_form_values'] = self.request.GET
Теперь, как я могу использовать my_form_values
в моем шаблоне нумерации страниц для отображения правильных URL?
А пока вот мой (упрощенный) код шаблона нумерации страниц:
{% for num in page_obj.page_range %}
{% if page_obj.number == num %}
<li class="page-item active">
<span class="page-link">{{ num }}</span>
</li>
{% else %}
<li class="page-item">
<a class="page-link" href="?page={{ num }}">{{ num }}</a>
</li>
{% endif %}
{% endfor %}
1 ответ
Я делаю это так
@register.simple_tag(takes_context=True)
def param_replace(context, **kwargs):
d =context['request'].GET.copy()
for k,v in kwargs.items():
d[k] = v
for k in [k for k,v in d.items() if not v]:
del d[k]
return d.urlencode()
а затем нумерация страниц в шаблоне
<ul class="pagination">
{% if page_obj.has_previous %}
<li class="page-item"><a class="page-link"
href="?{% param_replace page=1 %}">{% trans 'first' %}</a>
</li>
<li class="page-item"><a class="page-link"
href="?{% param_replace page=page_obj.previous_page_number %}">{{ page_obj.previous_page_number }}</a>
</li>
{% endif %}
<li class="page-item active"><a class="page-link"
href="?{{ page_obj.number }}">{{ page_obj.number }}</a>
</li>
{% if page_obj.has_next %}
<li class="page-item"><a class="page-link"
href="?{% param_replace page=page_obj.next_page_number %}">{{ page_obj.next_page_number }}</a>
</li>
<li class="page-item"><a class="page-link"
href="?{% param_replace page=page_obj.paginator.num_pages %}">{% trans 'last' %}</a>
</li>
{% endif %}
</ul>