【问题标题】:Django CKEditor Image Uploads not appearingDjango CKEditor 图片上传未出现
【发布时间】:2016-09-19 11:11:22
【问题描述】:

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

【问题讨论】:

  • 对我有用的......将 MEDIA_URL = '/media/' 更改为 MEDIA_URL = 'media/' 。注意缺少的正斜杠。

标签: python django ckeditor


【解决方案1】:

使用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 的开发服务器时,默认提供静态文件但不提供媒体文件,因此您可以强制服务器考虑它们,下面的 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 上使用的旧函数。

【讨论】:

  • 将 CKEDITOR_UPLOAD_PATH 放在 MEDIA_URL 之后很重要,否则您的图片将不会显示。
【解决方案2】:

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

但是,就我而言,我不必更改 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 进行服务。仍然我认为有人应该说:“设置CKEDITOR_UPLOAD_PATH时不要使用完整路径!”

我希望这可以节省其他人一些时间。

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

    • 这是正确的方法(从 ckeditor 4 和 django 3 开始)。谢谢!
    【解决方案4】:

    @Mohammed-tayab 的解决方案稍加修改就对我有用:

    from ckeditor_uploader.fields import RichTextUploadingField

    【讨论】:

      猜你喜欢
      • 2019-07-16
      • 2020-06-07
      • 2013-06-05
      • 1970-01-01
      • 2017-10-12
      • 2014-05-03
      • 2010-11-30
      • 2013-02-05
      • 2011-01-08
      相关资源
      最近更新 更多