django-ckeditor图片上传提供错误的图片网址

时间:2013-10-17 16:33:54

标签: django django-forms ckeditor django-ckeditor

当我尝试文本编辑和其他文本相关的东西并保存它时,编辑器很好地完成了它的工作。但是当我尝试上传图片时,只需要一个不同的网址。我在窗户上。是因为这个原因,因为我在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:

的片段
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 %}

3 个答案:

答案 0 :(得分: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为您在本地使用的文件提供服务。 请注意:此方法仅用于开发和调试目的。请勿使用以下代码段部署您的代码。

您可以在"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)

从那里开始,你应该全力以赴。

正如一个快速免责声明:我是一位经验丰富的专业人士。鉴于我的具体设置和环境,这种方法对我有用。结果可能会有所不同。

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

答案 1 :(得分:0)

CKEDITOR_UPLOAD_PATH与MEDIA_ROOT相关。

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

在你的情况下它应该是

CKEDITOR_UPLOAD_PATH =&#39;&#39;

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

UPD:我看到你的问题可能还有其他一些问题。但是我注意到你的配置错误,这就是为什么我想解决这个问题,因为我遇到了麻烦,其他人也可能会发现这个问题和我的答案。如果他们自发布之日起更改了默认设置,那么您的配置可能是正确的。

答案 2 :(得分:0)

我做到了!!!

问题解决了!!!!!!

我和你一样有同样的问题。

你解决了吗?

你有没有改变

  

CKEDITOR_UPLOAD_PATH =&#39;上传/&#39;

别的什么?如果不对,不要改变。

每次使用django-ckeditor将图片成功上传到服务器后,django-ckeditor都会请求一个看起来像这样的网址

uploads/2015/06/11/app_software_360.jpg

这表明浏览器正在请求

本地主机:8000 /某处/某处/上传/ 2015/06/11 / app_software_360.jpg

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

有关

您可以查看此页面github issue

将这些添加到settings.py

  

MEDIA_ROOT = os.path.join(BASE_DIR,&#34; media&#34;)

     

MEDIA_URL =&#39; / media /&#39;

有效!

如果您认为这有用,请竖起大拇指。 :)