Django-filter: Документируйте, как django-filter работает с django-pagination

Созданный на 13 авг. 2009  ·  20Комментарии  ·  Источник: carltongibson/django-filter

Они оба хорошо работают вместе, мне потребовалось время, чтобы разобраться с этим. На основе примера в документации:

{% 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_ разбиения на страницы.

Самый полезный комментарий

Очень и очень полезно. Спасибо.

Все 20 Комментарий

Очень и очень полезно. Спасибо.

Я предлагаю также задокументировать, как это работает с 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_.

Я надеюсь, что в этом есть смысл.

Спасибо!!!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги