【问题标题】:Django pagination URLDjango 分页地址
【发布时间】:2023-03-18 15:30:01
【问题描述】:

我可以使用以下代码在http://127.0.0.1:8000/ 进行分页:

{% if is_paginated %}
<div class="pagination">
            <span class="page-links">
                {% if page_obj.has_previous %}
                    <a href="/?page={{ page_obj.previous_page_number }}">previous</a>
                {% endif %}
                <span class="page-current">
                    Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
                </span>
                {% if page_obj.has_next %}
                    <a href="/?page={{ page_obj.next_page_number }}">next</a>
                {% endif %}
            </span>
</div>
{% endif %}

views.py

class IndexView(generic.ListView):
    template_name = 'films/index.html'
    paginate_by = 1
    def get_queryset(self):
        return Film.objects.all()'

我想在http://127.0.0.1:8000/film id 上对一堆 cmets 进行分页,但到目前为止还没有做到。我的href通常类似于&lt;a href="{% url 'films:add_comment' film_id=film.id %}"&gt;Leave a comment&lt;/a&gt;,但只要它有效,我就不会在意它是如何写的。

和上面我试过的类似:

class DetailView(generic.DetailView):
    model = Film
    paginate_by = 10
    template_name = 'films/detail.html'

我认为此链接需要更改以包含电影 ID &lt;a href="/?page={{ page_obj.next_page_number }}"&gt;next&lt;/a&gt;,但它目前未在此页面上显示上一个/下一个链接,就像它在 http://127.0.0.1:8000/ 上所做的那样

更新:

index.html(有效)

{% if object_list %}

<table id="myTable">
    <tr>
        <th>Title</th>
        <th>Director</th>
        <th>Description</th>
        <th>Released</th>
    </tr>
    {% for film in object_list %}
    <tr>
        <td><a href="{% url 'films:detail' film.id %}">{{ film.title }}</a></td>
        <td>{{ film.director}}</td>
        <td>{{ film.description}}</td>
        <td>{{ film.pub_date}}</td>
    </tr>
    {% endfor %}
</table>


{% if is_paginated %}
<div class="pagination">
            <span class="page-links">
                {% if page_obj.has_previous %}
                    <a href="/?page={{ page_obj.previous_page_number }}">previous</a>
                {% endif %}
                <span class="page-current">
                    Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
                </span>
                {% if page_obj.has_next %}
                    <a href="/?page={{ page_obj.next_page_number }}">next</a>
                {% endif %}
            </span>
</div>
{% endif %}



{% else %}
<p>No films are available.</p>
{% endif %}

detail.html(不工作)

<table id="myTable">
    <tr>
        <th>Comment</th>
        <th>User</th>
        {% if user.is_authenticated %}
        <th>Update</th>
        <th>Delete</th>
        {% endif %}

       {% for comment in film.comment_set.all %}
    <tr>
        <td>{{ comment.body }}</td>
        <td>{{ comment.user }}</td>
    {% if request.user == comment.user %}
        <td><a href="{% url 'films:update_comment' film_id=film.id comment_id=comment.id %}">Update</a></td>
        <td><a href="{% url 'films:delete_comment' film_id=film.id comment_id=comment.id %}">Delete</a></td>
    {% endif %}
        {% endfor %}
    </tr>

</table>



{% if is_paginated %}
<div class="pagination">
            <span class="page-links">
                {% if page_obj.has_previous %}
                    <a href="?page=={{ page_obj.previous_page_number }}">previous</a>
                {% endif %}
                <span class="page-current">
                    Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
                </span>
                {% if page_obj.has_next %}
                    <a href="?page={{ page_obj.next_page_number }}">next</a>
                {% endif %}
            </span>
</div>
{% endif %}

<h2>Comment</h2>
{% if user.is_authenticated %}
<a href="{% url 'films:add_comment' film_id=film.id %}">Leave a comment</a>
{% else %}
<p>Please log in or register to comment</p>
{% endif %}

【问题讨论】:

    标签: django pagination


    【解决方案1】:

    看看这个tutorial。我用了几次,效果很好。

    你也可以试试这个:

    class IndexView(ListView):
        model = Film
        template_name = 'films/detail.html'
        paginate_by = 10
    
    
        def get_context_data(self, **kwargs):
            context = super().get_context_data(**kwargs) 
            list_films = Film.objects.all()
            paginator = Paginator(list_films, self.paginate_by)
    
            page = self.request.GET.get('page')
    
            try:
                film_page = paginator.page(page)
            except PageNotAnInteger:
                film_page = paginator.page(1)
            except EmptyPage:
                film_page = paginator.page(paginator.num_pages)
    
            context['object_list'] = film_page
            return context
    

    【讨论】:

    • 这对我来说看起来就像我在做什么?
    • 我没有收到任何错误,它似乎根本没有任何区别。没有下一个/上一个链接,页面上的cmet数量相同。
    • 嗯,你能看到 DOM 中插入的链接(即&lt;a ...&gt;next&lt;/a&gt;)吗?
    • 你能发布完整的模板,尤其是你遍历电影列表的部分吗?
    • 我已经为两个页面添加了 html,一个有效,一个无效。如果您觉得还有什么可以帮助的,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 2013-10-21
    • 2019-01-03
    • 1970-01-01
    • 2015-04-25
    • 2016-01-13
    相关资源
    最近更新 更多