2016-05-22 22 views
5

To jest duplikat Django Ckeditor image browser not finding images, ale uważam, że odpowiedź jest błędna (jest tam oczywisty błąd z nieokreśloną zmienną, nie mówiąc już o braku wcięcia w Pythonie).Django CKEditor Przesyłanie obrazu nie pojawia się

Używam Django CKEditor 5.0.3 i Django 1.9.6. Mogę przesłać obrazy do mojego administratora, ale pojawiają się one jako czerwone X w panelu administratora i nie pojawiają się w mojej witrynie.

ja wciąż zmaga się trochę z MEDIA_ROOT i etażerka, ale myślę, że mam rację:

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 

My urls.py, w tym mojej próbie czyszczenia połączony odpowiedź:

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

Odpowiedz

4

Za pomocą powoduje, że django-ckeditor przesyła obraz na numer /media/uploads/, na przykład:

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

Podczas używania serwera dev w Django, pliki statyczne są obsługiwane domyślnie, ale nie plików multimedialnych, dzięki czemu można zmusić serwer do ich rozpatrzenia, konfiguracja url poniżej powinno działać.

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

Brakujące funkcje patterns z old example był stary funkcja wierzę wykorzystywane na Django 1.6 lub 1.7.

2

Używanie Django 1.8 z django-ckeditor 5.3.0 Otrzymałem dokładnie te same objawy, co powyższe (ładowanie plików działało, ale atrybut src znacznika <img> został ustawiony niepoprawnie, powodując czerwone "X" w podgląd i uszkodzone łącza graficzne po publikacji).

W moim przypadku nie musiałem jednak niczego zmieniać w urls.py. Moim problemem było to, że miałem:

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

Więc moja pomyłka dawał CKEDITOR_UPLOAD_PATH ścieżkę gdzie chciałem CKEditor przesłać do (logiczne, nie?).

Rozwiązaniem było zmienić powyższą linię do

CKEDITOR_UPLOAD_PATH = "ckeditor"

Z perspektywy czasu widzę, jak ten pozwala Django CKEditor możliwość korzystania z MEDIA_ROOT dla przesyłania i MEDIA_URL do serwowania. Wciąż myślałem, że ktoś powinien to powiedzieć: "Nie używaj pełnej ścieżki podczas ustawiania CKEDITOR_UPLOAD_PATH!"

Mam nadzieję, że to oszczędza innym czas.