Они оба хорошо работают вместе, мне потребовалось время, чтобы разобраться с этим. На основе примера в документации:
{% block content %}
<form action="" method="get">
{{ f.form.as_p }}
<input type="submit" />
</form>
{% autopaginate f.qs 40 as filter_list %}
{% for obj in filter_list %}
{{ obj.name }} - ${{ obj.price }}<br />
{% endfor %}
{% paginate %}
{% endblock %}
Ключ в том, что вы должны использовать аргумент _as_ разбиения на страницы.
Очень и очень полезно. Спасибо.
Я предлагаю также задокументировать, как это работает с django-sorting. К сожалению, сортировка django должна выполняться до разбивки на страницы и не поддерживает ключевое слово as, поэтому мы _не_ можем сделать что-то вроде этого:
{% autosort f.qs as actionlog %}
{% autopaginate actionlog 30 %}
Подано на веб-сайте http://github.com/directeur/django-sorting/issues/#issue/4.
Получите эту проблему, когда я попробую описанное выше.
http://code.google.com/p/django-pagination/issues/detail?id=59#c0
Есть идеи о том, что это может быть?
Существует проблема с django-pagination: когда вы, скажем, находитесь на странице 5 и применяете фильтр, фильтр также передает переменную GET "page", поэтому на отфильтрованной странице вы уже находитесь на странице 5, это неправильно. . Есть ли способ исключить из URL-адреса переменную, которую django-pagination использует при применении фильтра? Надеюсь, это имеет смысл ...
mdgart,
Я решил проблему с переменной страницы на клиенте с помощью jQuery и библиотеки jQuery Back Button & Query (BBQ). См. Http://benalman.com/code/projects/jquery-bbq/docs/files/jquery-ba-bbq-js.html
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
<script type="text/javascript" src="{{ MEDIA_URL }}js/jquery.ba-bbq.min.js"></script>
<script type="text/javascript">
// on page load complete
$(function(){
// force all filter links to return to page 1
$('#changelist-filter a').querystring('page=1');
});
</script>
Когда пользователь щелкает ссылку фильтра, javascript устанавливает для параметра get параметра "page" значение 1.
В моем примере все мои фильтры отображаются в виде ссылок, расположенных в блоке div с идентификатором "changelist-filter". Вам нужно будет соответствующим образом изменить свой селектор jQuery.
Надеюсь это поможет.
mdgart, jonathonadler,
Я решил проблему с переменной страницы немного другим способом, чтобы не полагаться на javascript: просто не передавайте параметр page в FilterSet. Например, на основе примера в документации:
def product_list (запрос):
data = request.GET.copy ()
если 'страница' в данных:
del data ['страница']
f = ProductFilter (данные, queryset = Product.objects.all ())
вернуть render_to_response ('my_app / template.html', {'filter': f})
Надеюсь на помощь.
Очень аккуратное решение Ричардбарран, спасибо!
Спасибо. Я думал о внесении исправлений в документацию, чтобы говорить о django-pagination, но у меня есть небольшая проблема: в каком формате находится документация? :-(
Это не во-первых, поскольку Docutils жалуется на это (по крайней мере, на моем компьютере). Какие-либо предложения?
Ричард, это первое, но его нужно обработать с помощью sphinx (http://sphinx.pocoo.org/).
В тот момент, когда я использую тег autopaginate, я получаю ошибку типа «объект типа 'fooFilter' не имеет len ()». Я уверен, что у меня есть неизмеримый результат, потому что я могу зацикливать его и отображать объекты без использования django-pagination. Как я могу это исправить? Спасибо!
Отлично, сэкономил мне много времени, спасибо.
Не могли бы вы дать мне ссылки github на django-pagination и django-sorting, которые работают вместе, я безуспешно пробовал некоторые из этих репозиториев. Я получаю:
TemplateSyntaxError в / ads / search /
Перехваченная VariableDoesNotExist во время рендеринга: Ошибка поиска ключа [sorted_objects] в u '[{}, {\' csrf_token \ '...
используя этот шаблон
{% autosort filter.qs as sorted_objects %}
{% autopaginate sorted_objects 10 as object_list %}
{% for object in object_list %}
{{ object }}
{% endfor %}
{% paginate %}
<ul>
<li>{% anchor price "First Field" %}</li>
<li>{% anchor surface "Other Field" %}</li>
</ul>
Спасибо !
Извините, я не использовал django-sorting, поэтому ничем не могу помочь.
Удачи!
NB
Не могли бы вы дать мне ссылки github на django-pagination и django-sorting, которые работают вместе, я безуспешно пробовал некоторые из этих репозиториев. Я получаю:
TemplateSyntaxError в / ads / search /
Перехваченная VariableDoesNotExist во время рендеринга: Ошибка поиска ключа [sorted_objects] в u '[{}, {\' csrf_token \ '...используя этот шаблон
{% autosort filter.qs as sorted_objects %} {% autopaginate sorted_objects 10 as object_list %} {% for object in object_list %} {{ object }} {% endfor %} {% paginate %} <ul> <li>{% anchor price "First Field" %}</li> <li>{% anchor surface "Other Field" %}</li> </ul>
Спасибо !
Итак, вот рабочий пример требований к пипу для моего предыдущего вопроса:
django-фильтр == 0.5.3
django-pagination == 1.0.7
-e git: //github.com/lukeman/django-sorting.git#egg = django_sorting
Попробуйте воспользоваться моей вилкой:
https://github.com/camilonova/django-sorting
Кто-нибудь знает, возможно ли использование разбивки на страницы и сортировки с помощью django-filter с использованием общих представлений? Из этих примеров я вижу, что общий метод просмотра не используется.
Если я понимаю ваш вопрос, возможно, я использую его здесь: https://github.com/ouhouhsami/django-geoads/blob/master/geoads/views.py
Если кому-то интересно, я написал гораздо более полную замену django-sorting, называемую django-sorter: http://django-sorter.readthedocs.org/
Я собираюсь закрыть его, чтобы получить больше информации о системе отслеживания проблем. Прошло более 2 лет с момента последнего комментария.
Если кто-то хочет отправить запрос на перенос, обновляющий документацию, показывающую интеграцию с текущими решениями для разбивки на страницы / сортировки, я был бы очень рад просмотреть, но, если не считать этого, я вернусь к этому в следующий раз, когда он появится _IRL_.
Я надеюсь, что в этом есть смысл.
Спасибо!!!
Самый полезный комментарий
Очень и очень полезно. Спасибо.