Skocz do zawartości

Usunięcie limitu paginacji stronnicowania na django


Jacek Floryda
 Udostępnij

Rekomendowane odpowiedzi

Witam, chciałbym uzyskać taką paginacje. Chodzi o usunięcie limitu paginacji stronnicowania na django CMS

zamiast takiej 

image

chodzi mi o to, żeby po dziesiątce pojawiły się kropki a po nich ostatnia strona. Jak mogę to osiągnąć?

views.py

from django.shortcuts import render
from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator
from .models import Bans

def bans_index(request):
    bans_list = Bans.objects.order_by('-created')
    paginator = Paginator(bans_list, 15)

    page = request.GET.get('page')
    bans = paginator.get_page(page)
    return render(request, 'sourcebans/bans_index.html', {'bans': bans})

bans_index.html (wycinek)

<div class="col-md-12">
                    <nav aria-label="Page navigation example">
                      <ul class="pagination">
                          {% if bans.has_previous %}
                            <li class="page-item">
                                  <a class="page-link" href="?page={{ bans.previous_page_number }}" aria-label="Previous">
                                    <span aria-hidden="true">&laquo;</span>
                                    <span class="sr-only">Previous</span>
                                  </a>
                            </li>
                          {% endif %}
                          {% for i in bans.paginator.page_range %}
                            {% if bans.number == i %}
                                <li class="page-item active"><span class="page-link">{{ i }} <span class="sr-only">(current)</span></span></li>
                            {% else %}
                                <li class="page-item"><a class="page-link" href="?page={{ i }}">{{ i }}</a></li>
                            {% endif %}
                          {% endfor %}
                          {% if bans.has_next %}
                            <li class="page-item">
                              <a class="page-link" href="?page={{ bans.next_page_number }}" aria-label="Next">
                                <span aria-hidden="true">&raquo;</span>
                                <span class="sr-only">Next</span>
                              </a>
                            </li>
                          {% endif %}
                      </ul>
                    </nav>
                </div>
Odnośnik do komentarza
Udostępnij na innych stronach

  • Ekspert

Na Django się nie znam, więc tu nie pomogę.

Jednak zasada paginacji zawsze jest ta sama. A podobny wygląd robiłem nawet niedawno i też w Twigu

To jest za duże:

bans.paginator.page_range

Tam powinno znajdować się tylko 10 stron począwszy od tej, na której jesteś.

Kolejnym krokiem jest warunek, jeśli ostatnia strona z zakresu jest mniejsza od ostatniej strony (ogólnie) minus 1, to wyświetl wielokropek.

Następny warunek, jeśli ostatnia strona z zakresu nie jest równa ostatniej stronie (ogólnie) , to wyświetl link do ostaniej strony.

No i na sam koniec wyświetl link 'dalej'. Najlepiej też z warunkiem - jeśli aktualna strona nie jest równa ostatniej stronie (ogólnie).

Edytowane przez El Profesor
Odnośnik do komentarza
Udostępnij na innych stronach

Problem wciąż nierozwiązany? Dodaj swoją odpowiedź

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto. Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
 Udostępnij

  • Ostatnio przeglądający

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
  • Podobna zawartość

    • Hi, zacząłem się uczyć pythona, oglądając kilka "tutoriali" zrozumiałem, że najlepiej uczyć się robiąc coś co sobie zaplanujemy, więc zaplanowałem stworzenie tak jakby "klikera" do gry przeglądarkowej, a później jak już ogarnę pythona przeniesieniu go do requestów (jeśli się nie mylę), ale mniejsza.
      Napotkałem problem, szukam i szukam i nie mogę tego ogarnąć, mianowicie chcę stworzyć okno w którym wyświetli się owa gra czyli tak jakby przeglądarkę lecz tylko z tą jedną stroną (gra jest oparta o flash), wiem jak stworzyć okno, ale szukając informacji o wyświetlani strony w oknie znalazłem tylko "webbrowser", który ją tylko uruchamia w domyślnej przeglądarce.

      from tkinter import * import webbrowser class Application(Frame):          def __init__(self, master=None):         Frame.__init__(self, master)         self.pack() root = Tk() app = Application(master=root) app.mainloop() root.destroy()
    • Witam. Jakie są zarobki za kodowanie w Java oraz Pythonie? Mam zamiar się wziąć za jeden język z tych dwóch i mam dylematy. Mam zapał do informatyki i szkoda było by go nie wykorzystać. 
    • Witam, otóż już nie mogę dojść w czym jest problem.
      Mam taki kod:
      serializers.py
      from rest_framework import serializers from .models import Custom_ChatColors class JBCCCSerializer(serializers.ModelSerializer): class Meta: model = Custom_ChatColors fields = '__all__' def create(self, validated_data): return Custom_ChatColors.objects.db_manager('jb_db').create(**validated_data) views.py
      from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import status from django.http import Http404 from jailbreak.models import Custom_ChatColors from .serializers import JBCCCSerializer class JBCCCList(APIView): def get(self, request, format=None): ccc = Custom_ChatColors.objects.db_manager('jb_db').all() serializer = JBCCCSerializer(ccc, many=True) return Response(serializer.data) def post(self, request, format=None): serializer = JBCCCSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) i gdy próbuje dodać nowy wpis to wywala błąd, że nie ma tabeli w domyślnej bazie danych a ja chciałbym, żeby pobierało ja z bazy o nazwe 'jb_db'.
      router.py
      class JailBreakRouter: def db_for_read(self, model, **hints): if model._meta.app_label == 'jailbreak': return 'jb_db' return None def db_for_write(self, model, **hints): if model._meta.app_label == 'jailbreak': return 'jb_db' return None def allow_relation(self, obj1, obj2, **hints): if obj._meta.app_label == 'jailbreak' or \ obj2._meta.app_label == 'jailbreak': return True return None def allow_migrate(self, db, app_label, model_name=None, **hints): if app_label == 'jailbreak': return db == 'jb_db' return None I settings.py
      DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'portal', 'USER': 'root', 'PASSWORD': '', 'HOST': 'localhost' }, 'jb_db': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'jailbreak', 'USER': 'root', 'PASSWORD': '', 'HOST': 'localhost' } } DATABASES_ROUTERS = ['jailbreak.router.JailBreakRouter',]
    • Witam, otóż tak mam taki kod na pobieranie informacji o serwerach dzięki Api Liveserver.
      Szablon:
      <div class="row"> {% if servers %} {% for server in servers %} <div class="col-md-4"> <div class="card dark-bg"> <img class="card-img-top" src="{{ server.banner }}" alt="Card image cap"> <div class="card-body"> <div class="card-title text-center">{{ server.server_id|get_info:"name" }}</div> <div class="card-text text-center"> <p class="text-center">IP: {{ server.ip }}</p> <p class="text-center">Graczy: {{ server.server_id|get_info:"players" }}/{{ server.server_id|get_info:"maxplayers" }}</p> <p class="text-center">Mapa: {{ server.server_id|get_info:"map" }}</p> {% if server.server_id|get_info:"status" == "Online" %} <p class="text-center">Status: <span class="badge badge-pill bg-success">{{ server.server_id|get_info:"status" }}</span></p> {% else %} <p class="text-center">Status: <span class="badge badge-pill bg-danger">{{ server.server_id|get_info:"status" }}</span></p> {% endif %} </div> <div class="row"> <div class="col-md-12"> <a href="steam://connect/{{ server.ip }}" class="btn btn-primary d-block justify-content-center">Dołącz</a> </div> </div> <div class="row" style="margin-top: 5px"> <div class="col-md-12"> <a href="https://www.gametracker.com/server_info/{{ server.ip }}" class="btn btn-danger d-block justify-content-center">GameTracker</a> </div> </div> </div> </div> </div> {% endfor %} {% else %} <div class="col-md-12"> <h1 class="text-center text-light"> Brak</h1> </div> {% endif %} </div> Tag do szablonu:
      from django import template from django.conf import settings import requests register = template.Library() @register.filter() def get_info(obj, value): data = { 'client_id': settings.LS_CLIENT_ID, 'pin': settings.LS_CLIENT_PIN, 'server_id': obj } response = requests.post(settings.LS_URL, data=data) if response.status_code == 200: server = response.json() server['success'] = True if value == 'players': var = server['players'] elif value == 'maxplayers': var = server['maxplayers'] elif value == 'name': var = server['name'] elif value == 'map': var = server['map'] elif value == 'status': if server['status'] == '0': var = 'Offline' else: var = 'Online' else: server['success'] = False if response.status_code == 404: server['message'] = "Nie znaleziono" else: server['message'] = 'Api nie dostępne' server['success'] = False return var I teraz moje pytanie czy dało by się to jakoś bardziej zoptymalizować? Ponieważ szybkość ładowania strony z tym kodem a bez strasznie się różni.
  • Najnowsze tematy

  • Ostatnio rozwiązane

×