2016-05-22 27 views
5

Questo è un duplicato di Django Ckeditor image browser not finding images, ma credo che la risposta non sia corretta (c'è un bug ovvio in esso con una variabile indefinita, per non parlare della mancanza di indentazione di Python).Django CKEditor Image Uploads non appare

Utilizzo Django CKEditor 5.0.3 e Django 1.9.6. Sono in grado di caricare immagini nel mio amministratore, ma appaiono come una X rossa all'interno dell'amministratore e non compaiono sul mio sito.

Sto ancora lottando un po 'con MEDIA_ROOT e quant'altro, ma credo di avere bene:

STATIC_URL = '/static/' 

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"), 
) 

MEDIA_URL = "image_upload/" 
MEDIA_ROOT = os.path.join(BASE_DIR, "image_upload") 

CKEDITOR_UPLOAD_PATH = 'uploads/' 
CKEDITOR_IMAGE_BACKEND = "pillow" 
CKEDITOR_UPLOAD_SLUGIFY_FILENAME = False 

mio urls.py, compreso il mio tentativo di ripulire la risposta collegata:

from django.conf import settings 
from django.conf.urls import url, include 
from django.conf.urls.static import static 
from django.contrib import admin 
from mainsite.views import HomepageView, AboutView, ContactView 
from django.contrib.staticfiles.urls import staticfiles_urlpatterns 

urlpatterns = [ 
    url(r'^admin/', admin.site.urls, name="admin"), 
    url(r'^$', HomepageView.as_view(), name="homepage"), 
    url(r'^about/', AboutView.as_view(), name="about"), 
    url(r'^contact/', ContactView.as_view(), name="contact"), 
    url(r'^blog/', include("blog.urls", namespace="blog")), 
    url(r'^ckeditor/', include('ckeditor_uploader.urls')), 
] 

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

if settings.DEBUG: 
    urlpatterns += [ 
     url(r'^media/(?P<path>.*)$', 
      'django.views.static.serve', { 
       'document_root': settings.MEDIA_ROOT, 
      } 
     ), 
    ] 

urlpatterns += staticfiles_urlpatterns() 

risposta

4

Utilizzo di CKEDITOR_UPLOAD_PATH = 'uploads/' rende django-ckeditor per caricare un'immagine a /media/uploads/, ad esempio:

settings.py:

STATICFILES_DIRS = [ 
    os.path.join(BASE_DIR, 'static/'), 
] 
STATIC_URL = '/static/' 
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/') 
MEDIA_URL = '/media/' 
CKEDITOR_UPLOAD_PATH = 'uploads/' 

Quando si utilizza un server dev del Django, i file statici sono serviti da non file multimediali di default, ma, in modo da poter forzare il server a considerarli, la configurazione di URL di seguito dovrebbe funzionare.

urls.py:

from django.conf.urls import url, include 
from django.contrib import admin 
from django.conf import settings 
from django.views.static import serve 
from .views import HomeView 

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^$', HomeView.as_view(), name='home'), 
    url(r'^ckeditor/', include('ckeditor_uploader.urls')), 

# serving media files only on debug mode 
if settings.DEBUG: 
    urlpatterns += [ 
     url(r'^media/(?P<path>.*)$', serve, { 
      'document_root': settings.MEDIA_ROOT 
     }), 
    ] 

La funzione mancante patterns dal old example era una vecchia funzione Credo che usato su Django 1.6 o 1.7.

2

Utilizzando Django 1.8 con django-ckeditor 5.3.0, stavo ottenendo gli stessi identici sintomi di quelli sopra (caricamento dei file funzionanti, ma l'attributo src del tag <img> non è stato impostato correttamente, causando una "X" rossa nel anteprima e collegamenti alle immagini interrotte al momento della pubblicazione).

Nel mio caso, tuttavia, non ho dovuto modificare nulla in urls.py. Il mio problema era che avevo:

CKEDITOR_UPLOAD_PATH = os.path.join(MEDIA_ROOT, "ckeditor")

Quindi il mio errore stava dando CKEDITOR_UPLOAD_PATH il percorso in cui ho voluto ckeditor per caricare (logico, no?).

La correzione è stato quello di cambiare la linea di cui sopra per

CKEDITOR_UPLOAD_PATH = "ckeditor"

Col senno di poi posso vedere come questo permette django-ckeditor la possibilità di utilizzare il root_supporto per il caricamento e la MEDIA_URL per servire. Tuttavia ho pensato che qualcuno dovrebbe dirlo: "Non utilizzare il percorso completo quando si imposta CKEDITOR_UPLOAD_PATH!"

Spero che questo salvi gli altri un po 'di tempo.