2016-12-19 10 views
0

Загрузка изображений с помощью Django CKEditor --getting ошибка сервера (500)Загрузка изображений с помощью Django CKEditor --getting ошибка сервера (500)

Я боролась за проблемы в течение двух дней. К сожалению, я до сих пор не знаю, как это решить из-за моих плохих знаний. Поэтому я должен приехать сюда с просьбой о помощи. Очень ценю!

enter image description here

Я хочу, чтобы написать сайт как мой блог и использовать Django для его реализации. Чтобы развить этот сайт, мне нужно использовать богатый текстовый редактор, поэтому я использую CKeditor на панели администратора. Вот ссылка исходного кода Ckeditor на github. https://github.com/django-ckeditor/django-ckeditor

Чтобы загрузить изображения с помощью виджета ckeditor, я отредактировал этот файл ../static/ckeditor/ckeditor/plugins/image/di alogs/image.js, чтобы он мог отображать кнопку загрузки изображений.

id:"Upload",hidden:!0 

Я также добавил URL-адрес загрузки в config.js. После этого я установил маршрутизацию в urls.py и добавил функцию view в views.py. На моем компьютере все было нормально. однако после того, как я развернул его на сервере веб-сайта, я получил ошибку сервера (500) во время загрузки изображения ckeditor. Виджет Ckeditor не может вернуть URL-адреса, но я могу найти изображения на сервере, которые я загрузил ckeditor.

$:~/sites/www/source$ ls ../media/images/ 
20161219045646_7.jpeg   20161219053949_0094.jpg  
$:~/sites/www/source$ 

config.js (место static/ckeditor/ckeditor/)

/** 
* @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. 
* For licensing, see LICENSE.md or http://ckeditor.com/license 
*/ 

CKEDITOR.editorConfig = function(config) { 
     config.filebrowserImageUploadUrl="/articleuploadimg/"; 
}; 

urls.py

from django.conf.urls import url, include 
from django.contrib import admin 
from article import views as article_views 
urlpatterns = [ 
    url(r'^ckeditor/', include('ckeditor_uploader.urls')), 
    url(r'^admin/', admin.site.urls), 
    url(r'^articleuploadimg/', article_views.article_upload_image), 
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

Файл дерева

|___sites 
     |___www.mysite.com 
       |___database 
       | |___db.sqlite3 
       | 
       |___source 
       | |___manage.py 
       | |___article 
       | |  |___views.py 
       | |  |___... 
       | |___... 
       | 
       |___static 
       | |___ckeditor 
       | |___css 
       | |___js 
       |  
       |___virtualenv 
       |___media 
        |___images 

views.py

from django.shortcuts import render 
from article.models import Article 
from django.views.decorators.csrf import csrf_protect 
import time 

@csrf_protect 
def article_upload_image(request): 
    if request.method == 'POST': 
     callback = request.GET.get('CKEditorFuncNum') 
     try: 
      path = "../../media/images/"+time.strftime("%Y%m%d_%H%M%S", time.localtime()) 
      f = request.FILES["upload"] 
      file_name = path + "_" + f.name 
      des_origin_f = open(file_name, "wb+") 
      for chunk in f: 
       des_origin_f.write(chunk) 
      des_origin_f.close() 
     except Exception as e: 
      print (e) 
     res = r"<script>window.parent.CKEDITOR.tools.callFunction("+callback+",'"+file_name+"','');</script>" 
     return HttpResponse(res) 
    else: 
     raise Http404() 

settings.py

# Application definition  
INSTALLED_APPS = [ 
    'ckeditor', 
    'ckeditor_uploader', 
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'article', 
] 
... 
... 

# Static files (CSS, JavaScript, Images) 
# https://docs.djangoproject.com/en/1.10/howto/static-files/ 

STATIC_URL = '/static/' 
STATIC_ROOT = os.path.abspath(os.path.join(BASE_DIR, '../static')) 

# Media files (upload path) 
MEDIA_URL = '/media/' 
MEDIA_ROOT = os.path.abspath(os.path.join(BASE_DIR, '../media/')) 
CKEDITOR_UPLOAD_PATH = "" 
CKEDITOR_JQUERY_URL = '//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js' 

ответ

0

я добавил что-то в /etc/nginx/sites-available/www.mysite.com

location /media { 
    alias /home/XXX/sites/www.mysite.com/media; 
} 

, а также изменили путь

path = "../media/images/" 

И, наконец, это работает!