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默认模板),在引入子模板时显式传递用户变量:
- 新建
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 %}
- 在模型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
相关产品推荐
相关产品推荐

