2014-10-05 9 views
6

Ich habe einige Bilder im CKEditor in der Django Admin-Schnittstelle hochgeladen. Ich kann Bilder durchsuchen und auswählen, indem ich im Editor auf die Schaltfläche "Bild" klicke und dann im folgenden Fenster auf "Server durchsuchen" klicke. Hier ist ein Screenshot von dem Pop-up:Wie Bilder mit django-ckeditor hochgeladen entfernen?

Screenshot of the pop-up of CKEditor

Meine Frage ist: Wie kann ich Bilder auf dem Server gelöscht werden kann?

Antwort

0

Leider ist das wahr. Django-ckeditor bietet keine integrierte Lösung für dieses Problem. Informationen über hochgeladene Dateien werden nirgendwo gespeichert.

Wenn Sie sie behalten wollen - müssen Sie es selbst tun!

Erstellen Sie die entsprechenden Datenmodell mit dem überschrieben löschen Methode (oder eine der bereit „smart Felder“ benutzen, die Entfernung von Dateien für Sie behandeln können, 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) 

Bieten Sie Ihren eigenen Umsetzung von "Upload" (und optional "browse") Ansicht, die verwendet werden, Transaktionen merken:

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) 

Change default Umleitungen in 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'), 
    ... 
] 

und das ist alles ... Nun, wenn Sie Register Ihre neuen UploadedFile Modell, werden Sie tha Fähigkeit zu durchsuchen, suchen und entfernen gewähren Alle hochgeladenen Bilder direkt aus dem Django Admin-Panel.

(Diese Lösung wurde für Django 1.10 mit Verlängerungs django-ckeditor 5.3 implementiert)
Verwandte Themen