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

如何在Django Admin面板主页展示指定模型的字段

在Django Admin主页直接展示指定模型字段的实现方法

要在Django Admin主页直接展示某个模型的字段,无需点击模型入口,你可以通过自定义Admin站点模板和扩展AdminSite类实现,具体步骤如下:

1. 自定义Admin主页模板

Django Admin默认主页模板是admin/index.html,我们需要重写它来插入自定义内容:

  • 在项目根目录的templates文件夹下创建admin子目录(无则新建)
  • 新建index.html文件,继承Admin基础模板并替换content区块,示例代码:
{% extends "admin/base_site.html" %}
{% load i18n static %}

{% block content %}
<!-- 保留原有App列表展示 -->
<div id="content-main">
  {% if app_list %}
    {% for app in app_list %}
      <div class="app-{{ app.app_label }} module">
        <table>
          <caption>
            <a href="{{ app.app_url }}" class="section" title="{% blocktrans with name=app.name %}Models in the {{ name }} application{% endblocktrans %}">{{ app.name }}</a>
          </caption>
          {% for model in app.models %}
            <tr class="model-{{ model.object_name|lower }}">
              {% if model.admin_url %}
                <th scope="row"><a href="{{ model.admin_url }}">{{ model.name }}</a></th>
              {% else %}
                <th scope="row">{{ model.name }}</th>
              {% endif %}

              {% if model.add_url %}
                <td><a href="{{ model.add_url }}" class="addlink">{% translate 'Add' %}</a></td>
              {% else %}
                <td></td>
              {% endif %}

              {% if model.admin_url and show_changelinks %}
                {% if model.view_only %}
                  <td><a href="{{ model.admin_url }}" class="viewlink">{% translate 'View' %}</a></td>
                {% else %}
                  <td><a href="{{ model.admin_url }}" class="changelink">{% translate 'Change' %}</a></td>
                {% endif %}
              {% elif show_changelinks %}
                <td></td>
              {% endif %}
            </tr>
          {% endfor %}
        </table>
      </div>
    {% endfor %}
  {% else %}
    <p>{% translate "You don't have permission to view or edit anything." %}</p>
  {% endif %}

  <!-- 新增自定义模型展示区块 -->
  <div class="app-myapp module">
    <table>
      <caption>{% translate '核心数据展示' %}</caption>
      {% if custom_model_data %}
        {% for item in custom_model_data %}
          <tr>
            <th scope="row">{{ item.title }}</th>
            <td>{{ item.content }}</td>
            <td><a href="{% url 'admin:myapp_mymodel_change' item.id %}" class="changelink">{% translate '修改' %}</a></td>
          </tr>
        {% endfor %}
      {% else %}
        <tr><td>{% translate '暂无数据' %}</td></tr>
      {% endif %}
    </table>
  </div>
</div>
{% endblock %}

2. 扩展AdminSite类传递模型数据

自定义AdminSite类,把目标模型的数据注入模板上下文:

  • 在项目admin.py中编写自定义站点逻辑:
from django.contrib.admin import AdminSite
from .models import MyModel  # 替换成你要展示的模型

class MyAdminSite(AdminSite):
    def index(self, request, extra_context=None):
        extra_context = extra_context or {}
        # 按需获取模型数据,示例取最新5条
        extra_context['custom_model_data'] = MyModel.objects.all()[:5]
        # 权限控制:仅给有权限的用户展示
        if not request.user.has_perm('myapp.view_mymodel'):
            extra_context['custom_model_data'] = None
        return super().index(request, extra_context=extra_context)

# 实例化自定义站点
admin_site = MyAdminSite(name='myadmin')

# 注册所有模型到自定义站点
from .models import OtherModel, AnotherModel
admin_site.register(MyModel)
admin_site.register(OtherModel)
admin_site.register(AnotherModel)
  • 在项目urls.py中替换默认Admin路由:
from django.contrib import admin
from .admin import admin_site

urlpatterns = [
    # path('admin/', admin.site.urls),  # 注释默认路由
    path('admin/', admin_site.urls),  # 使用自定义站点
]

3. 样式适配(可选)

示例中用了Django Admin默认的app-xxx module类,展示框体样式会和默认App列表保持一致,无需额外CSS。若需调整样式,可在模板中添加自定义CSS或修改现有类。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:12:43