2014-10-05 11 views
6

Ho caricato alcune immagini all'interno di CKEditor nell'interfaccia di amministrazione di Django. Posso sfogliare e selezionare le immagini facendo clic sul pulsante "Immagine" nell'editor, quindi fare clic su "Cerca server" nella finestra che si apre. Ecco uno screenshot del pop-up:Come rimuovere le immagini caricate con django-ckeditor?

Screenshot of the pop-up of CKEditor

La mia domanda è: Come posso eliminare le immagini sul server?

risposta

0

Purtroppo questo è vero. Django-ckeditor non fornisce alcuna soluzione integrata per questo problema. Le informazioni sui file caricati non sono memorizzate dove.

Se vuoi tenerli, devi farlo da solo!

Creare l'appropriato modello di dati con l'override eliminare metodo (o utilizzare uno dei ready "campi intelligenti" in grado di gestire la rimozione dei file per voi, 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) 

Fornire il proprio attuazione di "caricati" (e facoltativo "browse") vista, che sarà utilizzato per memorizzare le transazioni:

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) 

Variazione di default reindirizza 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'), 
    ... 
] 

e questo è tutto ... Ora, se si registro vostro nuovo UploadedFile modello, si concede tha possibilità di navigare, cercare e rimuovere qualsiasi immagine caricata direttamente dal pannello di amministrazione di Django.

(Questa soluzione è stata realizzata per Django 1.10 con estensione django-ckeditor 5.3)

Problemi correlati