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

Django+Nginx+uWSGI部署后Admin编辑页面500错误排查求助

排查Django Admin操作HuoDong模型时的500错误(Nginx+uWSGI部署)

咱们一步步来拆解这个问题——毕竟DEBUG=False的时候,Django不会直接抛出详细错误信息,只能从日志、配置和模型细节入手定位问题。


第一步:先获取详细的错误日志(最关键!)

目前你的uwsgi.log只记录了请求返回500,但没有错误栈细节,这很难定位根源。你可以通过配置Django的日志系统来捕获详细错误:

  1. 在项目的settings.py中添加日志配置:
import os
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'error_file': {
            'level': 'ERROR',
            'class': 'logging.FileHandler',
            'filename': os.path.join(BASE_DIR, 'django_errors.log'),
        },
    },
    'loggers': {
        'django': {
            'handlers': ['error_file'],
            'level': 'ERROR',
            'propagate': True,
        },
        'django.request': {
            'handlers': ['error_file'],
            'level': 'ERROR',
            'propagate': False,
        },
    },
}
  1. 保存后重启uWSGI服务,然后再次尝试访问/admin/ssccapp/huodong/add/或编辑页面触发错误,打开生成的django_errors.log就能看到完整的错误栈信息了——这是最快找到问题的方法。

如果不想改配置,仅限测试环境,可以临时把settings.py里的DEBUG=True,并把ALLOWED_HOSTS添加你的服务器IP(比如ALLOWED_HOSTS = ['127.0.0.1', '你的公网IP']),这样访问admin时就能直接看到详细错误。


第二步:排查媒体文件(Media)的配置与权限

你的HuoDong模型里有ImageField和UEditorField,这两个都涉及文件上传/访问,而DEBUG=False时Django不会处理媒体文件请求,必须由Nginx接管,同时要保证目录权限正确:

1. 检查Django的Media配置

确认settings.py里的MEDIA_ROOT和MEDIA_URL配置正确:

MEDIA_ROOT = os.path.join(BASE_DIR, 'static/images')  # 对应你ImageField的upload_to路径
MEDIA_URL = '/media/'

2. 配置Nginx转发媒体请求

在你的Nginx站点配置中添加媒体文件的location规则:

server {
    # 其他现有配置...

    # 处理媒体文件请求
    location /media/ {
        alias /path/to/your/django/project/static/images/;  # 注意替换成你实际的项目路径,末尾斜杠要加
        expires 30d;
    }
}

配置完成后重启Nginx:sudo systemctl restart nginx

3. 确认目录权限

uWSGI运行的用户(通常是www-data)需要对static/images目录有读写权限,否则上传文件时会报错:

# 替换成你的项目路径
sudo chown -R www-data:www-data /path/to/your/django/project/static/images
sudo chmod -R 755 /path/to/your/django/project/static/images

第三步:检查UEditorField的配置问题

UEditor作为第三方富文本编辑器,部署时容易出现路径配置错误:

  • 你模型里的UEditorField配置了imagePath="static/images/%%Y/%%m/",如果MEDIA_ROOT已经是static/images,这个路径会变成static/images/static/images/YYYY/MM/,导致路径不存在无法写入。建议改成相对路径:imagePath="images/%%Y/%%m/"
  • 确认你已经执行过python manage.py collectstatic,把UEditor的静态文件收集到STATIC_ROOT目录,否则admin页面加载UEditor资源时会出错。

第四步:验证默认图片的存在

你的ImageField设置了default = 'normal.jpg',要确认这个文件确实存在于static/images/目录下,并且Nginx能正常访问——如果文件缺失,加载模型表单时可能引发500错误。


先按上面的步骤排查,尤其是先拿到详细错误日志,几乎能直接定位问题根源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:32:28