Django Summernote 插件通过 userid 上传图片

问题描述 投票:0回答:1

我正在使用 Django 的 Summernote 插件,我的目标是允许用户在服务器内上传媒体。目前,文件(默认情况下)组织在以上传日期命名的文件夹中。比如:

  • “项目名称/media/django-summernote/2024-10-11/989d2f98-ad3c-47d6-9c07-e5f6d0c731e6.png”
  • “项目名称/media/django-summernote/2024-10-17/13d646b8-d7cd-4e04-a76a-804a1ee0d090.jpg”。

是否可以更改路径并在路径中包含 user_id ? 类似的东西

  • “项目名称/media/django-summernote/User100/989d2f98-ad3c-47d6-9c07-e5f6d0c731e6.png”
  • “项目名称/media/django-summernote/User200/13d646b8-d7cd-4e04-a76a-804a1ee0d090.jpg”。

我做了什么

我在

settings.py
文件中进行了这些编辑

# Summernote plugin
def summernote_upload_to(request, filename):
 user = request.user
    
    # Create the dynamic path
 upload_path = f'user_upload/{user}'
    return os.path.join(upload_path)

SUMMERNOTE_CONFIG = {
    'attachment_upload_to': summernote_upload_to,
    'summernote': {
        'attachment_filesize_limit': 200 * 1000 * 1000, # specify the file size
        'width': '100%',
        'height': '480',
 }
}

但是,当我上传图像时,出现错误

属性错误:“附件”对象没有属性“用户”

python django django-forms django-settings summernote
1个回答
0
投票

我了解您想要自定义 Summernote 的上传路径以包含用户 ID 而不是日期。发生错误的原因是 Attachment_upload_to 函数收到的参数与您期望的不同。让我帮你解决这个问题。 您可以按照以下步骤来解决问题

1.创建包含用户信息的自定义附件模型 2.修改上传路径包含用户ID 3.确保文件上传过程中用户信息可用 4.维护基于UUID的文件名的唯一性 5.为匿名上传提供后备

文件现在将保存在以下路径中:

项目名称/media/django-summernote/User100/uuid-filename.png 项目名称/media/django-summernote/User200/uuid-filename.jpg

如果您在已上传文件的项目中实现此操作,请记住仔细处理任何现有文件和迁移。

如果需要任何代码片段,请联系我;我将提供详细的代码,但我保证上面的代码将有效,因为它适用于我的域!

© www.soinside.com 2019 - 2024. All rights reserved.