Saat ini saya memiliki tampilan daftar yang menampilkan 10 posting per halaman:

Url akan menjadi seperti ini:

www.example.com/posts/1  (First page with 10 results)
www.example.com/posts/2  (Next page with 10 results)

Dan urls.py saya terlihat seperti ini:

path('posts/<int:page>', PostList.as_view(), name='post-list'),

Saya ingin agar halaman pertama posting juga terlihat ketika tidak ada nomor, misalnya:

www.example.com/posts  (First page with 10 results)

Satu-satunya cara saya dapat menyelesaikan ini adalah dengan menambahkan baris lain di urls.py yang menunjuk ke tampilan yang sama dan yang memiliki nama yang sama.

path('posts', PostList.as_view(), name='post-list'),
path('posts/<int:page>', PostList.as_view(), name='post-list'),

Apakah ini cara yang tepat untuk melakukan ini atau adakah cara yang lebih baik?

Terimakasih banyak!

2
Alvaro Bataller 29 Oktober 2019, 09:14

4 jawaban

Jawaban Terbaik
//this or is there a better way pagination page:

// contoh:

Def index(permintaan): user_list = User.objects.all() page = request.GET.get('page', 1)

paginator = Paginator(user_list, 10)
try:
    users = paginator.page(page)
except PageNotAnInteger:
    users = paginator.page(1)
except EmptyPage:
    users = paginator.page(paginator.num_pages)

return render(request, 'core/user_list.html', { 'users': users })
0
Mas Hary 29 Oktober 2019, 07:28

Maaf, saya telah mencoba dalam beberapa cara tetapi gagal. Sebenarnya, saya selalu melakukan seperti ini:

# urls.py

urlpatterns = [
    path('posts/', PostList.as_view()),
]

Dan:

# views.py
class PostList(View):

    def get(self, request):
        return HttpResponse('true')

    def post(self, request):
        page = request.POST.get('page')
        print(page)
        return HttpResponse('false')

Untuk pagination, Anda dapat mempertimbangkan untuk menggunakan metode POST, itu saja

0
Ginta 29 Oktober 2019, 08:36
 list view that displays 10 posts per page :
this solutions :

view.py
----------
from django.contrib.auth.models import User
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

def index(request):
    user_list = User.objects.all()
    page = request.GET.get('page', 1)

    paginator = Paginator(user_list, 10)
    try:
        users = paginator.page(page)
    except PageNotAnInteger:
        users = paginator.page(1)
    except EmptyPage:
        users = paginator.page(paginator.num_pages)

    return render(request, 'core/user_list.html', { 'users': users })


user_list.html
--------------
<table class="table table-bordered">
  <thead>
    <tr>
      <th>Username</th>
      <th>First name</th>
      <th>Email</th>
    </tr>
  </thead>
  <tbody>
    {% for user in users %}
      <tr>
        <td>{{ user.username }}</td>
        <td>{{ user.first_name }}</td>
        <td>{{ user.email }}</td>
      </tr>
    {% endfor %}
  </tbody>
</table>

{% if users.has_other_pages %}
  <ul class="pagination">
    {% if users.has_previous %}
      <li><a href="?page={{ users.previous_page_number }}">«</a></li>
    {% else %}
      <li class="disabled"><span>«</span></li>
    {% endif %}
    {% for i in users.paginator.page_range %}
      {% if users.number == i %}
        <li class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></li>
      {% else %}
        <li><a href="?page={{ i }}">{{ i }}</a></li>
      {% endif %}
    {% endfor %}
    {% if users.has_next %}
      <li><a href="?page={{ users.next_page_number }}">»</a></li>
    {% else %}
      <li class="disabled"><span>»</span></li>
    {% endif %}
  </ul>
{% endif %}
0
Mas Hary 29 Oktober 2019, 07:32

Anda dapat mengatur halaman nilai default. Di dunia lain, jika kelas PostList tidak mendapatkan parameter halaman, dan nilai halaman akan menjadi default 1. Harap dapat membantu Anda!

1
Ginta 29 Oktober 2019, 06:24