You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Wagtail管理后台的模型列表中添加每页条目数选择按钮?

在Wagtail后台自定义每页条目数选择按钮的实现方法

完全可以自定义实现这个功能,以下是具体步骤:

1. 自定义视图处理分页参数

根据你要修改的是ModelAdmin模型列表还是Wagtail页面列表,选择对应的实现方式:

针对ModelAdmin模型列表

在admin.py中继承并修改IndexView,从请求参数中获取每页条目数:

from wagtail.contrib.modeladmin.views import IndexView
from wagtail.contrib.modeladmin.options import ModelAdmin, modeladmin_register
from .models import 你的模型类

class CustomIndexView(IndexView):
    def get_paginate_by(self, queryset):
        # 从GET参数获取per_page,默认20条
        per_page = self.request.GET.get('per_page', 20)
        try:
            return int(per_page)
        except ValueError:
            return 20

class 你的模型Admin(ModelAdmin):
    model = 你的模型类
    index_view_class = CustomIndexView
    # 其他ModelAdmin配置(如菜单图标、显示字段等)

modeladmin_register(你的模型Admin)

针对Wagtail页面列表

自定义PageListingView并重写分页逻辑,通过钩子注册替换默认视图:

from wagtail.admin.views.pages import PageListingView
from wagtail.core import hooks

class CustomPageListingView(PageListingView):
    def get_paginate_by(self, queryset):
        per_page = self.request.GET.get('per_page', 20)
        try:
            return int(per_page)
        except ValueError:
            return 20

@hooks.register('register_admin_view')
def override_page_listing():
    return CustomPageListingView.as_view()

2. 覆盖模板添加选择控件

复制Wagtail对应页面的默认模板,添加每页条目数选择表单:

针对ModelAdmin模型列表

创建templates/wagtailmodeladmin/index.html,复制默认模板内容后,在分页控件附近添加以下代码:

<form action="" method="get" class="per-page-selector">
    <!-- 保留其他查询参数(如搜索关键词) -->
    {% for key, value in request.GET.items %}
        {% if key != 'per_page' %}
            <input type="hidden" name="{{ key }}" value="{{ value }}">
        {% endif %}
    {% endfor %}

    <label for="per_page">每页显示:</label>
    <select name="per_page" id="per_page" onchange="this.form.submit()">
        <option value="10" {% if request.GET.per_page == '10' %}selected{% endif %}>10条</option>
        <option value="20" {% if request.GET.per_page == '20' or not request.GET.per_page %}selected{% endif %}>20条</option>
        <option value="50" {% if request.GET.per_page == '50' %}selected{% endif %}>50条</option>
        <option value="100" {% if request.GET.per_page == '100' %}selected{% endif %}>100条</option>
    </select>
</form>

针对Wagtail页面列表

创建templates/wagtailadmin/pages/list.html,复制默认模板内容后,在分页区域插入上述表单代码。

3. 可选:添加样式优化显示

在自定义的Admin CSS文件中添加样式,让选择控件和分页按钮对齐:

.per-page-selector {
    display: inline-block;
    margin-left: 1rem;
    vertical-align: middle;
}
.per-page-selector label {
    margin-right: 0.5rem;
}
.per-page-selector select {
    padding: 0.25rem 0.5rem;
}

内容的提问来源于stack exchange,提问作者xSkolz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 04:10:21