如何在博客文章中嵌入代码和图像

时间:2017-12-15 02:52:39

标签: python django

我正在尝试通过创建个人博客来教自己Django。目前我的模型中有一个Post类,它将正文存储为TextField。与

类似
class Post(models.Model):

    title = models.CharField(max_length=150)
    body = models.TextField()
    author = models.ForeignKey(Author, related_name='blog_posts')
    published = models.DateTimeField(default=timezone.now)
    slut = models.SlugField(max_length=100, unique_for_date='publish')

这是我想要的90%。

我希望能够做的是,包括帖子正文中不是文本的内容。特别是图像和代码片段。

我怎样才能实现这一目标?我可以使用哪种数据类型?或者其他一些方式?

3 个答案:

答案 0 :(得分:2)

您可以将富文本编辑器集成到Django中(包括Django admin)。我推荐CKEditor,因为它很好,但那里有很多。

向帖子添加图片的最简单方法是将其上传到其他地方(例如imgur),然后使用您选择的富文本编辑器将其嵌入到帖子中。

如果您想在Django中允许图片上传,最简单的方法是创建另一个可以与帖子关联的模型,例如

For i = 1 To 20
    Dim p = new Panel()
    Dim lab = New Label()
    lab.Text = "label" & i
    Dim TextBoxes As New TextBox
    TextBoxes.ID = "RS" & i
    TextBoxes.Text = Slot.Rows(0)(Ri).ToString()
    TextBoxes.Attributes.Add("class", "slotFields")

    p.Controls.Add(lab)
    p.Controls.Add(TextBoxes)

    PlaceHolder.Controls.Add(p)
Next

使用内联管理员公开此内容(文档详细说明了这一点)。

然后在您的模板中,您可以迭代图像:

class Image(models.Model):
    image = ImageField()
    post = models.ForeignKey('yourapp.Post')

这当然意味着图片并不符合您帖子的文字内容 - 他们只会在帖子之前/之后吐出来。

添加在Django中上传图像并将其嵌入内联的功能超出了本次会话的范围,因为必须做出一些设计决定。

答案 1 :(得分:1)

我使用django-summernote这很好。

答案 2 :(得分:1)

在您的模板中使用safe过滤器有一个糟糕的解决方案,此过滤器会停用HTML转义:

{{ code | safe }}

但这是一种不好的做法,因为:

  • 任何可以编辑的人都可以在其中加入一些恶意代码。
  • 如果你输了一个错字,就会轻易“打破”你网页的代码。

值得知道它存在,但我建议你不要使用

更好的解决方案......

...将使用一些django-markdown包来解释降价代码并将其转换为安全 HTML代码。

原因如下:

  • Markdown是一种简单明了的语法格式。它甚至在非djangoist环境中也很有用。 (如果您不熟悉它,DuckDuckGo为此语言提供nice cheatsheet
  • 使用降价解释器不会破坏您网页的代码。
  • 在您的模板中集成降价功能可能就像没有缺点的safe过滤器一样简单(它可能类似于{{ code | markdown }})。

django-markdown2django-markdownx可能都符合您的需求,但如果它不能自由尝试其他人的话!

找到支持图片或代码段的内容应该不会有问题。