2016-05-22 4 views
5

Dies ist ein Duplikat von Django Ckeditor image browser not finding images, aber ich glaube, die Antwort ist falsch (es ist ein offensichtlicher Fehler darin mit einer undefinierten Variable, ganz zu schweigen von dem Fehlen von Python Einrückung).Django CKEditor Image Uploads nicht erscheinen

Ich verwende Django CKEditor 5.0.3 und Django 1.9.6. Ich kann Bilder in meinen Admin hochladen, aber sie erscheinen als rotes X im Admin und erscheinen nicht auf meiner Site.

Ich bin immer noch ein bisschen mit MEDIA_ROOT und so weiter zu kämpfen, aber ich glaube, ich habe es richtig:

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 

Mein urls.py, darunter meinen Versuch, die verknüpfte Antwort Reinigung:

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() 

Antwort

4

Mit CKEDITOR_UPLOAD_PATH = 'uploads/' macht Django-ckeditor ein Bild auf /media/uploads/, wie:

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/' 

Wenn der dev-Server des Django, statische Dateien standardmäßig bedient werden, aber nicht von Mediendateien, so können Sie den Server, sie zu berücksichtigen erzwingen, sollte die URL unten stehende Konfiguration arbeiten.

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 
     }), 
    ] 

Die fehlende Funktion patterns vom old example war eine alte Funktion, die ich auf Django 1.6 oder 1.7 verwendet glauben.

2

Mit Django 1.8 mit Django-Ckeditor 5.3.0 erhielt ich genau die gleichen Symptome wie oben (Hochladen von Dateien funktioniert, aber das src Attribut des Tags wurde falsch gesetzt, was ein rotes "X" in der Vorschau und gebrochene Bildlinks bei der Veröffentlichung). In meinem Fall musste ich in urls.py nichts ändern. Mein Problem war, dass ich hatte:

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

Also mein Fehler CKEDITOR_UPLOAD_PATH den Weg gab, wo ich ckeditor zu (logisch, oder?) Hochladen wollte.

Das Update war die obige Zeile zu

CKEDITOR_UPLOAD_PATH = "ckeditor"

Im Nachhinein zu ändern, kann ich sehen, wie die django-ckeditor die Fähigkeit ermöglicht die MEDIA_ROOT für das Hochladen und die MEDIA_URL zum Servieren zu verwenden. Trotzdem dachte ich, jemand sollte es sagen: "Benutze nicht den vollen Pfad, wenn du CKEDITOR_UPLOAD_PATH einstellst!"

Ich hoffe, das spart anderen einige Zeit.