在 Django 中自定义下一页(分页)

时间:2021-04-04 07:08:56

标签: django pagination

所以我正在 Django 中建立一个与 YouTube 有相似之处的网站。我的意思是会有一些缩略图,当您单击其中一个缩略图时,它会将您带到将播放视频的页面。 现在进入代码,因为我不想对我选择使用分页的所有内容进行硬编码,但我有一个问题,因为分页是自动完成的,我无法更改下一页的缩略图。所以要么我的分析是错误的,要么有正确的方法。

这是模板的代码:

{% load static %}

{% block content %}
<div class="row row-cols-1 row-cols-sm-2 row-cols-md-3 g-3 mb-5">
    <div class="col">
        <div class="card shadow-sm">
            <a href="{% url 'watch1' %}" target="_blank"> <img src="{% static 'thumbnails/hacker.jpeg' %}" height="225"
                                                               width="100%"></a>

            <div class="card-body">
                <p class="card-text">
                    {% for element in page_obj %}
                    {% if element.category == 'boxing' %}

                    {{ element.description|truncatechars:50 }}

                    {% endif %}
                    {% endfor %}
                </p>
                <div class="d-flex justify-content-between align-items-center">
                    <div class="btn-group">

                    </div>
                    <small class="text-muted">9 mins</small>
                </div>
            </div>
        </div>
    </div>
    <div class="col">
        <div class="card shadow-sm">
            <a href="{% url 'watch2' %}" target="_blank"> <img src="{% static 'thumbnails/hydra.jpg' %}" height="225"
                                                               width="100%"></a>
            <div class="card-body">
                <p class="card-text">
                    {% for element in page_obj %}
                    {% if element.category == 'boxing' %}

                    {{ element.description|truncatechars:50 }}

                    {% endif %}
                    {% endfor %}
                </p>
                <div class="d-flex justify-content-between align-items-center">
                    <div class="btn-group">

                    </div>
                    <small class="text-muted">9 mins</small>
                </div>
            </div>
        </div>
    </div>
    <div class="col">
        <div class="card shadow-sm">
            <a href="{% url 'watch3' %}" target="_blank"> <img src="{% static 'thumbnails/darkweb.jpg' %}" height="225"
                                                               width="100%"></a>
            <div class="card-body">
                <p class="card-text">
                    {% for element in page_obj %}
                    {% if element.category == 'boxing' %}

                    {{ element.description|truncatechars:50 }}

                    {% endif %}
                    {% endfor %}
                <div class="d-flex justify-content-between align-items-center">
                    <div class="btn-group">

                    </div>
                    <small class="text-muted">9 mins</small>
                </div>
            </div>
        </div>
    </div>


</div>

<div class="pagination">
    <span class="step-links">
        {% if page_obj.has_previous %}
            <a href="?page=1">&laquo; first</a>
            <a href="?page={{ page_obj.previous_page_number }}">previous</a>
        {% endif %}

        <span class="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>
            <a href="?page={{ page_obj.paginator.num_pages }}">last &raquo;</a>
        {% endif %}
    </span>
</div>

{% endblock%}

视图中的函数

def boxing(request):
videos = Video.objects.all()
paginator = Paginator(videos, 3)  # shows 3 videos per page
pageNumber = request.GET.get('page')
try:
    page_obj = paginator.get_page(pageNumber)
except:
    page_obj = paginator.get_page(1)
return render(request, 'boxing.html', {'page_obj': page_obj})

而且我的循环也对所有内容显示相同的内容。我可以只使用 if 语句来准确选择我想要的视频,但随着分页的发生,它也会在下一页上做同样的事情。

0 个答案:

没有答案