【问题标题】:django-ckeditor image upload giving wrong url of the imagedjango-ckeditor 图片上传给出了错误的图片 url
【发布时间】:2013-10-17 16:33:53
【问题描述】:

当我尝试文本编辑和其他与文本相关的东西并保存它时,编辑器可以很好地完成它的工作。但是当我尝试上传图片时,它只需要一个不同的网址。我在窗户上。是不是因为这个,因为我在this post 上看到了一个帖子,但它也没有帮助我。它确实被保存了,而且他们每个人都有自己的缩略图。但它只是错误的网址。 我查看了图片的src,是这样的,

<img alt="" src="/media/3/10/17Hydrangeas.jpg" />

但应该是这样的,

<img alt="" src="/media/2013/10/17/Hydrangeas.jpg" />

而有时候图片的src就是这样的,

<img alt="" src="/media/3/10/17" />

这是我的settings.py的sn-p:

CKEDITOR_UPLOAD_PATH = 'C:/Users/Nanyoo/web/demo/media'
MEDIA_ROOT = 'C:/Users/Nanyoo/web/demo/media'

我已将其网址包含在我的 urls.py 中:

(r'^ckeditor/', include('ckeditor.urls')),

models.py:

from django.db import models
from datetime import datetime
from django.contrib.auth.models import User
from time import time


def get_upload_file_name(instance, filename):
    return "uploaded_files/%s_%s" %(str(time()).replace('.','_'), filename)

class Blog(models.Model):
    title = models.CharField(max_length=200)
    image = models.ImageField(upload_to=get_upload_file_name, blank=True)
    pub_date = models.DateTimeField(default=datetime.now)
    creator = models.ForeignKey(User, related_name="creator_set")
    body = models.TextField()

在forms.py中:

from django import forms
from django_summernote.widgets import SummernoteWidget
from ckeditor.widgets import CKEditorWidget

class BlogForm(forms.Form):
    title = forms.CharField(max_length=200,widget=SummernoteWidget())
    body = forms.CharField(widget=CKEditorWidget())

在 index.html 中:

        {% for blog in blogs %}
        <div id="page">
                <h1>{{ blog.title | safe}}</h1>
                <p>{{ blog.body | safe}}</p>
        </div>
        {% endfor %}

我在 html 中的表单:

{% block content %} 
    <form method="post" action=".">
    {% csrf_token %}
    <fieldset id="create_blog">
        {{form.media}}
        {{ form.as_p}}
        <input type="submit" value="Post Blog" />
    </fieldset>
    </form>
{% endblock %}

【问题讨论】:

  • 看起来问题出在get_upload_file_name。图片实际保存在文件系统的什么位置?
  • 在媒体目录中......而且我想我没有使用我的模型的图像属性,因为我正在使用编辑器的图像上传功能将它放置在我的身体中。还是我错了?如果我错了,请纠正我的先生。
  • 对不起,你是对的,我是个白痴:-)。
  • 不,问题:)!或者可能是因为我没有像这样在 ckupload 路径中放置 uploads 作为后缀:CKEDITOR_UPLOAD_PATH = 'C:/Users/Nanyoo/web/demo/media/uploads' ??
  • 您在使用CKEditor 之前是否运行过manage.py collectstatic?它对我来说总是开箱即用,所以这很奇怪。

标签: django django-forms ckeditor django-ckeditor


【解决方案1】:

我花了一些时间让 django-ckeditor 启动并运行我的 Django 应用程序,但最终破解了我的方法,能够在本地机器上提供上传的文件(在开发/测试期间)。

我建议做的第一件事——如果你还没有这样做的话——阅读Django's documentation regarding static files。它可能有助于更好地了解事物的配置方式和原因。

django-ckeditor installation documentation开始,第4步概述了CKEDITOR_UPLOAD_PATH的用途这与Django内置的MEDIA_ROOTSTATIC_ROOT类似,其中提供的路径不一定是存储文件的路径.您必须指定在上传时存储文件的路径。这可以通过确保在项目设置文件中声明了 MEDIA_URL 全局变量来完成。

完成初始设置后,最后一步是使 Django 能够在本地提供您正在使用的文件。 请注意:此方法仅用于开发和调试目的。不要部署包含以下 sn-p 的代码。

您可以在 "Serving static files during development" 部分中通过 Django 的静态文件操作方法阅读更多关于此方法的信息。

在您项目的 urls.py 文件中,添加以下代码,使 Django 能够为您的本地数据提供服务。

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = patterns(
    '',
    # existing url patterns,
    # ...,
) + static(settings.MEDIA_URL, document_root=settings.STATIC_ROOT)

从那里开始,你应该准备好了。

作为一个快速免责声明:到目前为止,我是一位经验丰富的专业人士。考虑到我的特定设置和环境,这种方法对我有用。结果可能会有所不同。

希望这有助于您朝着正确的方向前进。祝你好运!

【讨论】:

    【解决方案2】:

    CKEDITOR_UPLOAD_PATH 是相对于 MEDIA_ROOT 的。

    https://github.com/django-ckeditor/django-ckeditor#id2

    在你的情况下应该是

    CKEDITOR_UPLOAD_PATH = ''

    这对我有用。老实说,所有这些 *_PATH 问题对我来说可能是 Django 中最困难的部分。

    UPD:我知道您的问题可能属于其他类型。但是我注意到您的配置中的错误,这就是我想解决这个问题的原因,因为我遇到了麻烦,其他人也可能会发现这个问题和我的答案。也许你的配置是正确的,如果他们在你发帖后改变了默认值。

    【讨论】:

      【解决方案3】:

      我成功了!!!

      问题解决了!!!!!!

      我和你有同样的问题。

      你解决了吗?

      你改变了吗

      CKEDITOR_UPLOAD_PATH = '上传/'

      到别的地方??错了不要改。

      每次我使用 django-ckeditor 成功将图片上传到服务器后,django-ckeditor 都会请求一个如下所示的 URL

      uploads/2015/06/11/app_software_360.jpg
      

      这表明浏览器正在请求

      localhost:8000/somewhere/someplace/uploads/2015/06/11/app_software_360.jpg

      但不是 localhost:8000/media/uploads/2015/06/11/app_software_360.jpg 这实际上是正确的 URL 位置,但 django-ckeditor 就是找不到。我猜这与settings.py有关

      你可以查看这个页面githubissue

      通过将这些添加到 settings.py

      MEDIA_ROOT = os.path.join(BASE_DIR, "media")

      MEDIA_URL = '/media/'

      有效!

      如果您认为这有帮助,请点赞。 :)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-16
        • 2020-06-07
        • 2013-06-05
        • 2016-09-19
        • 2017-04-08
        • 2010-11-30
        • 2017-10-12
        • 2018-06-22
        相关资源
        最近更新 更多