2015-04-18 2 views
-7

Я следую за этим документом djangoproject.com: https://docs.djangoproject.com/en/1.8/topics/pagination/. Но это слишком просто. Это только кнопка Next и Previous.Как создать разбивку на страницы в Django?

Теперь я хочу создать разбивку на страницы с большим количеством функций, таких как http://i.imgur.com/ZiFeAqG.jpg.

Это код:

View.py

def hire(request): 

hire_article_list = hire_article.objects.all().order_by('-id') 
#hire_article_list = hire_article.objects.order_by("-publication_date") 

paginator = Paginator(hire_article_list, 2) # Show 25 contacts per page 

page = request.GET.get('page') 
try: 
    hire_article_s = paginator.page(page) 

except PageNotAnInteger: 
    # If page is not an integer, deliver first page. 
    hire_article_s = paginator.page(1) 
except EmptyPage: 
    # If page is out of range (e.g. 9999), deliver last page of results. 

    hire_article_s = paginator.page(paginator.num_pages) 

#return render_to_response('hire/list.html', {"page_list": page_list}) 
context = {'hire_article_s': hire_article_s} 
return render(request, 'hire/list.html', context) 

list.html

{% for j in hire_article_s %} 
    {# Each "j" is a page_list model object. #} 
    <li><a href="/hire/{{ j.slug }}-{{j.id}}">{{ j.hiring}}</a></li> 
{% endfor %} 

   {% if hire_article_s.has_previous %} 
        <a href="?page={{ hire_article_s.previous_page_number }}">previous</a> 
       {% endif %} 

       <span class="current"> 
        Page {{ hire_article_s.number }} of {{ hire_article_s.paginator.num_pages }}. 
       </span> 

       {% if hire_article_s.has_next %} 
        <a href="?page={{ hire_article_s.next_page_number }}">next</a> 
       {% endif %} 

     </span> 
</div> 
+1

Можете ли вы отправить код, который вы пробовали, с разбиением на страницы с большей функциональностью. –

+0

благодарим за ответ. Я добавил – user3863069

+1

попробуйте использовать django бесконечную библиотеку разбиения на страницы, если это не работает – Zealous

ответ

1

У меня была аналогичная потребность на прошлой неделе, и нашел, что этосупер полезный gist (https://gist.github.com/jsatt/8183993), который отлично работал (хотя я не уверен, почему это не сработало, пока я не поместил запрос в параметры функции). Это подкласс функции Paginator django. Вы можете поместить это в файл утилиты и называть его всякий раз, когда хотите использовать Paginate с диапазоном.

Например, у меня был мой файл с именем utils.py, который находится в моем основном приложении.

views.py

from core.utils import paginate 

def hire(request): 

    hire_article_list = hire_article.objects.all().order_by('-id') 
    ''' 
    Show 25 contacts per page, with a page range of 5, which means if you are 
    on page 8, it shows links to pages 6,7,8,9,10. 
    ''' 
    hire_article_s = paginate(request, hire_article_list, 25, 5) 

    context = {'hire_article_s': hire_article_s} 
    return render(request, 'hire/list.html', context) 

list.html

{% if hire_article_s.has_previous %} 
    <a href="?page={{ hire_article_s.previous_page_number }}">previous</a> 
{% endif %} 

{% for range in hire_article_s.neighbor_range %} 
    {% if range == hire_article_s.number %} 
     <li class="pagination__item active ">{{ range }}</li> 
    {% else %} 
     <li class="{% if range == hire_article_s.number %}active {% endif %}"><a href="?page={{ range }}">{{ range }}</a></li> 
    {% endif %} 
{% endfor %} 

{% if hire_article_s.has_next %} 
    <a href="?page={{ hire_article_s.next_page_number }}">next</a> 
{% endif %} 

Надеется, что это помогает.

UPDATE

Приведенный выше код был отредактирован немного. Я добавил контекст и формат шаблона. Обратите внимание, что я использую цикл, чтобы пройти через {{ hire_article_s.neighbor_range }} и распечатать номера страниц. Я также делаю чек, чтобы выделить номер текущей страницы. Это должно работать, так как это мой собственный код с вашими собственными именами переменных.

+0

Спасибо, но когда я попытался, но не работал. Можете ли вы отправить свой код мне. – user3863069

+0

@ user3863069 Я обновил код с дополнительными разъяснениями. Если это не сработает, вам нужно сообщить мне, какую ошибку вы получаете. – onyeka

+0

вид сверху – user3863069

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