我在Django管理界面的CKEditor中上傳了一些圖片。我可以通過單擊編輯器中的「圖像」按鈕來瀏覽和選擇圖像,然後在彈出的窗口中單擊「瀏覽服務器」。這裏是彈出的截圖:如何移除使用django-ckeditor上傳的圖片?
我的問題是:我怎樣才能刪除服務器上的圖片?
我在Django管理界面的CKEditor中上傳了一些圖片。我可以通過單擊編輯器中的「圖像」按鈕來瀏覽和選擇圖像,然後在彈出的窗口中單擊「瀏覽服務器」。這裏是彈出的截圖:如何移除使用django-ckeditor上傳的圖片?
我的問題是:我怎樣才能刪除服務器上的圖片?
恐怕這是ckeditor不可能的(至少我沒有看到這樣的功能開箱即可)。
您可以使用Django的文件管理器
不幸的是,這是真的。 Django-ckeditor不提供任何針對該問題的內置解決方案。有關上傳文件的信息不會存儲在任何位置。
如果你想保留它們 - 你必須自己做!
創建具有覆蓋適當數據模型刪除方法(或使用任何準備「靈活字段」,它可以處理文件的刪除,對你來說,Django delete FileField的):
from django.db import models
class UploadedFile(models.Model):
uploaded_file = models.FileField(upload_to=u"storage/")
uploaded_at = models.DateField(editable=False, auto_now_add=True)
def __str__(self):
return os.path.basename(self.uploaded_file.path)
def url(self):
return self.uploaded_file.url
def delete(self, *args, **kwargs):
file_storage, file_path = self.uploaded_file.storage, self.uploaded_file.path
super(UploadedFile, self).delete(*args, **kwargs)
file_storage.delete(file_path)
提供自己實施「上傳」(和可選的「瀏覽」)認爲,這將被用來記憶交易:
from django.conf import settings
from django.contrib.admin.views.decorators import staff_member_required
from django.views.decorators.cache import never_cache
from django.views.decorators.csrf import csrf_exempt
from ckeditor_uploader.views import upload, browse
from .models import UploadedFile
import re
@staff_member_required
@csrf_exempt
def ckeditor_upload_wrapper(request, *args, **kwargs):
response = upload(request, *args, **kwargs)
if b"Invalid" not in response.content:
try:
matched_regex = re.search("callFunction\(\d, '(.*)'\);", str(response.content))
file_location = matched_regex.group(1).lstrip(settings.MEDIA_URL)
UploadedFile(uploaded_file=file_location).save()
except Exception:
pass
return response
@staff_member_required
@csrf_exempt
@never_cache
def ckeditor_browse_wrapper(request, *args, **kwargs):
return browse(request, *args, **kwargs)
更改默認重定向在urls.py:
...
from app.views import ckeditor_upload_wrapper, ckeditor_browse_wrapper
urlpatterns = [
url(r'^admin/', admin.site.urls),
#url(r'^ckeditor/', include('ckeditor_uploader.urls')),
url(r'^ckeditor/upload/', ckeditor_upload_wrapper, name='ckeditor_upload'),
url(r'^ckeditor/browse/', ckeditor_browse_wrapper, name='ckeditor_browse'),
...
]
,這一切......現在,如果你寄存器新UploadedFile的模型,您將授予瀏覽,搜索和刪除THA能力任何直接從Django管理面板上傳的圖片。
(該溶液爲實現的Django 1.10帶擴展Django的CKEditor的5.3)