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

如何在Wagtail中添加自定义函数并展示数据库数据?

Wagtail中实现自定义数据库数据表格展示方案

Wagtail完全支持这类自定义开发——它本身基于Django构建,所有Django原生的视图、路由、模型逻辑都能直接复用,下面给你两种落地方案:

方法一:用Django原生视图+路由(适合独立功能页面)

  1. 创建视图文件:在你的app目录下新建views.py,编写获取自定义数据并渲染模板的逻辑:
from django.shortcuts import render
from .models import CustomData  # 替换成你的自定义模型

def data_table_view(request):
    # 从数据库读取数据,可按需添加排序、过滤逻辑
    data_list = CustomData.objects.all().order_by('-created_at')
    # 将数据传递给模板
    return render(request, 'custom/data_table.html', {'data': data_list})
  1. 配置路由:项目根目录若无urls.py则新建,在已有文件中添加自定义路由(注意把Wagtail的核心路由放在最后):
from django.contrib import admin
from django.urls import path, include
from wagtail.admin import urls as wagtail_admin_urls
from wagtail.documents import urls as wagtail_documents_urls
from wagtail import urls as wagtail_urls
from your_app_name.views import data_table_view  # 替换成你的app名称

urlpatterns = [
    path('admin/', admin.site.urls),
    path('wagtail-admin/', include(wagtail_admin_urls)),
    path('documents/', include(wagtail_documents_urls)),
    # 自定义数据表格页面的访问路由
    path('data-table/', data_table_view, name='data-table'),
    # Wagtail核心路由必须放在最后,避免覆盖自定义路由
    path('', include(wagtail_urls)),
]
  1. 编写渲染模板:在templates/custom/目录下新建data_table.html,用Django模板语法渲染表格:
{% extends "base.html" %}  <!-- 继承你项目的基础模板 -->

{% block content %}
<h2>自定义数据表格</h2>
<table border="1" cellpadding="8" cellspacing="0">
    <thead>
        <tr>
            <th>名称</th>
            <th>数值</th>
            <th>创建时间</th>
        </tr>
    </thead>
    <tbody>
        {% for item in data %}
        <tr>
            <td>{{ item.name }}</td>
            <td>{{ item.value }}</td>
            <td>{{ item.created_at|date:"Y-m-d H:i" }}</td>
        </tr>
        {% empty %}
        <tr>
            <td colspan="3" align="center">暂无数据</td>
        </tr>
        {% endfor %}
    </tbody>
</table>
{% endblock %}

方法二:用Wagtail Page模型集成(贴合后台管理场景)

如果希望表格页面能在Wagtail后台编辑、管理,推荐用这种方式:

  1. 自定义Page模型:在app的models.py中创建继承自Wagtail Page的模型,通过get_context方法传递数据:
from wagtail.models import Page
from wagtail.admin.panels import FieldPanel
from django.db import models
from .models import CustomData  # 你的自定义数据模型

class DataTablePage(Page):
    # 可添加自定义页面字段,比如副标题、描述
    subtitle = models.CharField(max_length=200, blank=True, verbose_name="副标题")

    # 配置后台编辑面板
    content_panels = Page.content_panels + [
        FieldPanel('subtitle'),
    ]

    # 重写get_context,将自定义数据传递到模板上下文
    def get_context(self, request, *args, **kwargs):
        context = super().get_context(request, *args, **kwargs)
        context['data'] = CustomData.objects.all()
        return context
  1. 编写页面模板:在templates/pages/目录下新建data_table_page.html:
{% extends "base.html" %}

{% block content %}
<h1>{{ page.title }}</h1>
{% if page.subtitle %}
<p class="subtitle">{{ page.subtitle }}</p>
{% endif %}

<table border="1" cellpadding="8" cellspacing="0">
    <thead>
        <tr>
            <th>名称</th>
            <th>数值</th>
            <th>创建时间</th>
        </tr>
    </thead>
    <tbody>
        {% for item in data %}
        <tr>
            <td>{{ item.name }}</td>
            <td>{{ item.value }}</td>
            <td>{{ item.created_at|date:"Y-m-d H:i" }}</td>
        </tr>
        {% empty %}
        <tr>
            <td colspan="3" align="center">暂无数据</td>
        </tr>
        {% endfor %}
    </tbody>
</table>
{% endblock %}
  1. 注册页面模型:确保你的app在settings.py的INSTALLED_APPS中,Wagtail会自动识别该页面模型,之后就能在后台创建「Data Table Page」类型的页面了。

两种方案各有侧重:方法二更符合Wagtail的使用习惯,方便后续在后台管理页面内容;方法一则适合不需要在Wagtail后台管控的独立功能页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:55:18