Django CKEditor图片上传未显示

时间:2016-05-22 15:37:33

标签: python django ckeditor

这是Django Ckeditor image browser not finding images的副本,但我相信答案是错误的(其中有一个明显的错误,其中包含一个未定义的变量,更不用说缺少Python缩进)。

我正在使用Django CKEditor 5.0.3和Django 1.9.6。我可以在我的管理员中上传图片,但它们在管理员中显示为红色X,但不会显示在我的网站上。

我仍然在与MEDIA_ROOT等等做斗争,但我认为我做对了:

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

我的urls.py,包括我尝试清理链接的答案:

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

4 个答案:

答案 0 :(得分:6)

使用CKEDITOR_UPLOAD_PATH = 'uploads/'可让django-ckeditor将图片上传到/media/uploads/,例如:

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

当使用Django的dev服务器时,静态文件是默认提供的,而不是媒体文件,所以你可以强制服务器考虑它们,下面的url配置应该可以工作。

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

来自old example的缺失函数patterns是我认为在Django 1.6或1.7上使用的旧函数。

答案 1 :(得分:3)

将Django 1.8与django-ckeditor 5.3.0一起使用时,我得到了与上述相同的症状(上传文件有效,但src标签的<img>属性设置不正确,导致在发布时预览和损坏的图像链接中的红色&#34; X&#34;。

但就我而言,我没有必要改变urls.py中的任何内容。我的问题是我有:

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

所以我的错误是给了CKEDITOR_UPLOAD_PATH我希望ckeditor上传到的路径(逻辑,没有?)。

修复方法是将上面一行更改为

CKEDITOR_UPLOAD_PATH = "ckeditor"

事后我可以看到这如何允许django-ckeditor使用MEDIA_ROOT进行上传和使用MEDIA_URL进行服务。我仍然认为有人应该这样说:&#34;在设置CKEDITOR_UPLOAD_PATH时不要使用完整路径!&#34;

我希望这能节省一些时间。

答案 2 :(得分:0)

安装ckeditor后,执行以下操作:

  
      
  1. Settings.py 中:   在 INSTALLED_APPS 中添加“ ckeditor ”和“ ckeditor_uploader ”。   添加 CKEDITOR_UPLOAD_PATH =' 上传目录 / '   (不要将 MEDIA_ROOT upload_directory 加入,ckeditor将把MEDIA_ROOT作为其根上载目录)

  2.   
  3. 在您的 模型 文件中:   使用from ckeditor_uploader import RichTextUploadingField并修改所需的模型字段以键入 RichTextUploadingField

  4.   
  5. urls.py 中:   将re_path(r'^ckeditor/', include('ckeditor_uploader.urls'))添加到 urlpatterns

  6.   

答案 3 :(得分:0)

@ Mohammed-tayab的解决方案为我做了一些修改:

from ckeditor_uploader.fields import RichTextUploadingField