如何在django管理面板上的文本字段上传图像,就像我们在wordpress中一样

时间:2015-12-14 09:46:46

标签: python django ckeditor

有没有什么方法可以在管理面板上将django textfield中的图像上传,就像我们在wordpress上选择上传图片一样。我使用ckeditor作为我的文本域编辑器,它允许我插入链接并使文本变为粗体,有一个上传图像选项可用,但它要求我提供图像URL而不是让我从我的系统浏览图像文件。以下是我的models.py代码的一部分:

from tinymce.models import HTMLField
from ckeditor.fields import RichTextField
from django.db import models
from datetime import datetime
from django.template.defaultfilters import slugify
from unidecode import unidecode
from django.template import defaultfilters




class Category(models.Model):
    name = models.CharField(max_length=128,unique=True)
    slug = models.SlugField(unique=True, null=True, blank=True)


    def save(self, *args, **kwargs):
        self.slug = slugify(self.name)
        super(Category, self).save(*args, **kwargs)

    def __str__(self):
        return self.name

class Heading(models.Model):
    category = models.ForeignKey(Category)
    title = models.CharField(max_length=5000)
    content = RichTextField()
    image= models.ImageField(null=True,blank=True)
    date = models.DateField(default=datetime.now())
    time = models.TimeField(default=datetime.now())
    slug = models.SlugField(unique=True, null=True, blank=True)

    def save(self, *args, **kwargs):
        self.slug = defaultfilters.slugify(unidecode(self.title))
        super(Heading, self).save(*args, **kwargs)



    def __str__(self):
        return self.title

以下是一些图片,展示了我现在所获得的内容: admin panel for texteditor

options i get

2 个答案:

答案 0 :(得分:2)

您可以使用django-ckeditor的 RichTextUploadingField 。 您需要先在 models.py

中导入它
from ckeditor.fields import RichTextUploadingField

现在在您的模型中,您可以这样做

content = RichTextUploadingField()

默认情况下, RichTextUploadingField 允许您上传任何文件。您还可以将此字段限制为仅上传图片,方法是将此行添加到 settings.py

CKEDITOR_ALLOW_NONIMAGE_FILES = False

答案 1 :(得分:0)

上传像WordPress这样的图像不是一个简单的过程,尽管实现起来很简单。

当您在WordPress中上传图像时,在后台WordPress将图像保存在服务器上(使用AJAX),然后获取其链接并在文本编辑器中显示它。

由于文字编辑不支持文件上传,您需要自己实现。

但是,当django-ckeditor app支持文件上传时,为什么还要烦恼呢。 See docs