Сейчас у меня есть вид списка, который отображает 10 сообщений на странице:

URL будет примерно таким:

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

И мой urls.py выглядит примерно так:

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

Я хочу, чтобы первая страница сообщений также была видна, когда нет номера, например:

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

Единственный способ решить эту проблему - добавить еще одну строку в urls.py, которая указывает на то же представление и имеет то же имя.

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

Это подходящий способ сделать это или есть лучший способ?

Большое спасибо!

2
Alvaro Bataller 29 Окт 2019 в 09:14

4 ответа

Лучший ответ
//this or is there a better way pagination page:

// пример:

Def index (запрос): 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 Окт 2019 в 07:28

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

# urls.py

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

И:

# 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')

Для нумерации страниц можно использовать метод POST , вот и все

0
Ginta 29 Окт 2019 в 08:36

Вы можете установить для страницы значение по умолчанию. В других мирах, если класс PostList не получит параметр page , а значение page будет По умолчанию 1. Надежда может помочь вам!

1
Ginta 29 Окт 2019 в 06:24
 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 Окт 2019 в 07:32
58602225