簡體   English   中英

如何在博客文章中嵌入代碼和圖像

[英]How to Embed Code and Images in a Blog Post

我正在嘗試通過創建個人博客來自學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%。

我想做的是在帖子正文中包含非文本的內容。 特別是圖像和代碼片段。

我該如何實現? 我可以使用一種數據類型嗎? 還是其他方式?

您可以將富文本編輯器集成到Django中(包括Django admin)。 我會推薦CKEditor,因為它很不錯,但是還有很多。

向您的帖子添加圖像的最簡單方法是將它們上傳到其他位置(例如imgur),然后使用您選擇的富文本編輯器將它們直接內嵌到您的帖子中。

如果要允許在Django中上傳圖片,最簡單的方法是創建另一個可以關聯到帖子的模型,例如

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

並使用內聯管理員公開此內容(文檔對此進行了詳細說明)。

然后,在模板中,您可以遍歷圖像:

{% for image in post.image_set.all %}
    <img src="{{ image.image.url }}" />
{% endfor %}

當然,這意味着圖像與您的帖子的文本內容不內聯-它們只會在帖子之前/之后吐出來。

添加功能以在Django中上傳圖像並將其嵌入到內嵌中超出了本次討論的范圍,因為必須做出一些設計決策。

我用django-summernote很好。

有一個不好的解決方案,那就是在模板中使用safe過濾器,該過濾器會停用HTML轉義:

{{ code | safe }}

但這是一個壞習慣,因為:

  • 任何可以編輯的人都可以在其中放入一些惡意代碼。
  • 如果您輸入錯誤,則可以輕松“破壞”頁面的代碼。

值得知道的是它存在,但我建議您不要使用它

更好的解決方案...

...將使用一些django-markdown程序包,該程序包將解釋markdown代碼並將其轉換為安全的 HTML代碼。

原因如下:

  • Markdown是格式化文本的簡便語法。 即使在非djangoist上下文中,它也可能很有用。 (如果您不熟悉它,DuckDuckGo會為此語言提供一個不錯的備忘單
  • 使用markdown解釋器不會破壞您頁面的代碼。
  • 這樣,將markdown集成到模板中就可以像沒有缺點的safe過濾器一樣簡單(它可能類似於{{ code | markdown }} )。

django-markdown2django-markdownx都可以滿足您的需求,但是如果您不能隨意嘗試另一種的話!

您不必費心找到一個支持圖像或代碼段的對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM