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

Django 4.0.4后台自定义模板无法获取登录用户信息求助

Django 4.0.4 后台change_list_results.html获取登录用户信息的解决方法

方法1:确保模板上下文包含request对象

检查settings.py中的TEMPLATES配置,确认OPTIONS.context_processors同时包含以下两项:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',  # 必须添加此项
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

添加完成后重启服务,在change_list_results.html中使用{{ request.user.username }}即可获取用户名。

方法2:重写Admin的changelist_view并正确传递上下文

在对应模型的Admin类中重写changelist_view,确保将用户信息传入上下文,且调用父类方法传递更新后的extra_context:

from django.contrib import admin
from .models import YourModel

class YourModelAdmin(admin.ModelAdmin):
    def changelist_view(self, request, extra_context=None):
        extra_context = extra_context or {}
        # 将当前用户存入extra_context
        extra_context['current_user'] = request.user
        # 必须调用父类方法,传入更新后的extra_context
        return super().changelist_view(request, extra_context=extra_context)

admin.site.register(YourModel, YourModelAdmin)

之后在change_list_results.html中直接使用{{ current_user.username }}或{{ current_user.email }}即可。

方法3:通过父模板显式传递变量到子模板

如果change_list_results.html是被change_list.html引入的,可自定义change_list.html(继承admin默认模板),在引入子模板时显式传递用户变量:

  1. 新建templates/admin/your_app/your_model/change_list.html,内容如下:
{% extends "admin/change_list.html" %}

{% block results %}
    {% include "admin/your_app/your_model/change_list_results.html" with user=user %}
{% endblock %}
  1. 在模型Admin类中指定自定义模板路径:
class YourModelAdmin(admin.ModelAdmin):
    change_list_template = 'admin/your_app/your_model/change_list.html'

此时change_list_results.html里可直接用{{ user.username }}获取用户信息。

方法4:检查模板加载优先级

确保自定义的change_list_results.html存放路径正确:需放在当前app的templates/admin/your_app/your_model/目录下,Django会优先加载该路径下的模板,避免因路径错误加载默认模板导致修改不生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 16:07:39