如何在 Django 中进行用户调整分页? [英] How to make user-adjustaple pagination in Django?

查看:39
本文介绍了如何在 Django 中进行用户调整分页?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有分页,html:

{% 扩展 'base.html' %}{% 加载 pagination_tags %}{% block title %}NewsLine{% endblock title %}{% 加载人性化 %}{% 块内容 %}{% 自动分页新闻 news_on_page %}{% 分页 %}页面新闻:<输入类型=提交"值=10"/><输入类型=提交"值=20"/><输入类型=提交"值=50"/><div class="container mt-3"><div class="row my-5"><div class="col-11"><p>新闻整体{{ paginator.count }}</p><p>页数{{ paginator.num_pages }}</p><p>页面范围{{ paginator.page_range }}</p>{% for Peace_of_news in news %}<div class="p-3"><h2>{{ Peace_of_news.title }}</h2><p><small>{{ Peace_of_news.date|naturaltime }}</small></p><p>{{ Peace_of_news.text }}</p>

{% 结束为 %}

{% 端块内容 %}

views.py:

from django.shortcuts 导入渲染从 .模型导入 PieceOfNews从 django.core.paginator 导入分页器从 Django 导入表单定义索引(请求):新闻 = PieceOfNews.objects.all().order_by('-date')分页器 = 分页器(新闻,10)all = list(PieceOfNews.objects.all())news_on_page = 3上下文 = {'新闻':新闻,'分页器':分页器,'所有':所有,'news_on_page':news_on_page}元类:verbose_name_plural = '一条新闻'返回渲染(请求,'index.html',上下文)def get_value():news_on_page = forms.IntegerField()

如何通过按钮获取一些值来调整页面上的新闻数量例如,用户可以选择:每页 10 条新闻、每页 20 条新闻和每页 50 条新闻.如何在 html 表单或视图中发送此值以在模板中再次返回它的值?或者也许有更好的方法做分页哪个用户可以调整?

解决方案

你可以试试这个:

通过 URL 传递 limit 查询,使用按钮值更改位置.

页面上的新闻:<输入类型=提交"值=?限制= 10";onclick="location = this.value;"/><输入类型=提交"值=?限制= 20";onclick="location = this.value;"/><输入类型=提交"值=?限制= 50";onclick="location = this.value;"/>

从索引视图函数中的 URL 读取限制查询,并使用该值对结果进行分页.

def 索引(请求):# 读取限制查询limit = request.GET.get('limit', 10)新闻 = PieceOfNews.objects.all().order_by('-date')# 在分页器中使用限制分页器 = 分页器(新闻,限制)all = list(PieceOfNews.objects.all())news_on_page = 3上下文 = {'新闻':新闻,'分页器':分页器,'所有':所有,'news_on_page':news_on_page}元类:verbose_name_plural = '一条新闻'返回渲染(请求,'index.html',上下文)

注意:如果未找到limit 查询字符串,则默认限制为 10.

I have pagination, html:

{% extends 'base.html' %}
{% load pagination_tags %}
{% block title %}NewsLine{% endblock title %}
{% load humanize %}

{% block content %}
    {% autopaginate news news_on_page %}
    {% paginate %}
    News on page:
    <input type="submit" value="10" />
    <input type="submit" value="20" />
    <input type="submit" value="50" />
    <div class="container mt-3">
        <div class="row my-5">
            <div class="col-11">
                <p>News overall {{ paginator.count }}</p>
                <p>Number of pages {{ paginator.num_pages }}</p>
                <p>Page range {{ paginator.page_range }}</p>
                    {% for peace_of_news in news %}

                        <div class="p-3">
                            <h2>{{ peace_of_news.title }}</h2>
                            <p><small>{{ peace_of_news.date|naturaltime }}</small></p>
                            <p>{{ peace_of_news.text }}</p>
                        </div>
                    {% endfor %}
            </div>
        </div>
    </div>
{% endblock content %}

views.py:

from django.shortcuts import render
from . models import PieceOfNews
from django.core.paginator import Paginator
from django import forms


def index(request):
    news = PieceOfNews.objects.all().order_by('-date')
    paginator = Paginator(news, 10)
    all = list(PieceOfNews.objects.all())
    news_on_page = 3
    context = {'news': news, 'paginator': paginator, 'all': all, 'news_on_page': news_on_page}

    class Meta:
        verbose_name_plural = 'piece of news'

    return render(request, 'index.html', context)


def get_value():
    news_on_page = forms.IntegerField()

How to get some value via button to adjust number of news on page For example, user have choices: 10 news per page, 20 news per page and 50 news per page. How to send this value in html form or in views to return it value again in template? OR Maybe there are some better way to do pagination which user can adjust?

解决方案

You can try this:

Use the button values to change the location by passing the limit query through the URL.

News on page:
<input type="submit" value="?limit=10" onclick="location = this.value;"/>
<input type="submit" value="?limit=20" onclick="location = this.value;"/>
<input type="submit" value="?limit=50" onclick="location = this.value;"/>

Read the limit query from the URL in the index view function and paginate the results with that value.

def index(request):
    # Read the limit query
    limit = request.GET.get('limit', 10)

    news = PieceOfNews.objects.all().order_by('-date')
    
    # Use the limit in the paginator
    paginator = Paginator(news, limit)
    all = list(PieceOfNews.objects.all())
    news_on_page = 3
    context = {'news': news, 'paginator': paginator, 'all': all, 'news_on_page': news_on_page}

    class Meta:
        verbose_name_plural = 'piece of news'

    return render(request, 'index.html', context)

Note : If the limit query string is not found then the default limit will be 10.

这篇关于如何在 Django 中进行用户调整分页?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
Python最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆