Eng*_*ngo 3 python django file-upload django-ckeditor
我想为使用django-ckeditor/uploader上传的图像创建随机uid文件名.
我utils.py在同一个文件夹中创建了settings.py:
import uuid
def get_name_uid():
ext = filename.split('.')[-1]
filename = "%s.%s" % (uuid.uuid4(), ext)
return filename
Run Code Online (Sandbox Code Playgroud)
我想将这个"随机"文件名添加到settings.py:
CKEDITOR_FILENAME_GENERATOR = get_name_uid()
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?我不知道如何获取在编辑器中上传的文件名.我应该将文件名从settings.py传递给utils.py吗?或者有不同的方法来做到这一点?
他们的文件说明如下:
``CKEDITOR_UPLOAD_PATH = "uploads/"``
When using default file system storage, images will be uploaded to "uploads" folder in your MEDIA_ROOT and urls will be created against MEDIA_URL (/media/uploads/image.jpg).
If you want be able for have control for filename generation, you have to add into settings yours custom filename generator.
```
# utils.py
def get_filename(filename):
return filename.upper()
```
```
# settings.py
CKEDITOR_FILENAME_GENERATOR = 'utils.get_filename'
```
CKEditor has been tested with django FileSystemStorage and S3BotoStorage.
There are issues using S3Storage from django-storages.
Run Code Online (Sandbox Code Playgroud)
它基本上都是在文档中为您拼写的:
def get_filename(filename):
return filename.upper() # returns the uppercase version of filename
Run Code Online (Sandbox Code Playgroud)
因此,示例函数get_filename获取传入的上传文件名,您应该返回您想要的文件名.这就是我们所说的回调.
回调作为参数传递的内容称为" 回调签名 ",文档整齐地指定了它的内容.
所以把功能放在一个有意义的地方.我会选择mysite/mysite/utils.py教程中概述的结构,标题为" 让我们看一下创建的startproject: ".所以在同一个目录中settings.py.我会命名它generate_uuid4_filename,mysite/mysite/utils.py看起来像这样:
import uuid
import os.path
def generate_uuid4_filename(filename):
"""
Generates a uuid4 (random) filename, keeping file extension
:param filename: Filename passed in. In the general case, this will
be provided by django-ckeditor's uploader.
:return: Randomized filename in urn format.
:rtype: str
"""
discard, ext = os.path.splitext(filename)
basename = uuid.uuid4().urn
return ''.join(basename, ext)
Run Code Online (Sandbox Code Playgroud)
现在更新你的settings.py:
# Near the rest of the CKEditor variables
CKEDITOR_FILENAME_GENERATOR = '<app_label>.utils.generate_uuid4_filename'
Run Code Online (Sandbox Code Playgroud)
而且你已经完成了.祝好运!
| 归档时间: |
|
| 查看次数: |
784 次 |
| 最近记录: |