2

我有一个 django 驱动的网站。目前,所有文本字段都只是采用原始 HTML 的普通旧文本输入。我没有花哨的编辑器或任何东西。我想开始使用 Markdown 和 WMD 让每个人都更轻松。

我是否必须运行某种脚本来遍历数据库中的每个文本字段才能将所有 HTML 转换为 markdown?如果我通过降价过滤器运行 HTML,它会在另一边出现相同的结果吗?WMD 编辑器是否会从服务器读取 HTML 并将其转换为 Markdown 供用户编辑?

这里正确的做法是什么?

4

4 回答 4

4

正如我在您的另一个问题中提到的那样,使用 markdown 时的一个好模式是以 markdownhtml 格式将文本存储在您的数据库中。这样就不需要每次查看页面都转成html,在admin中编辑原始markdown也很方便。

例如,一个博客应用程序可能有

class BlogPost(models.Model):

    ...

    body = models.TextField(help_text='Use Markdown syntax.')
    #field to store generated html
    body_html = models.Textfield(editable=False, blank=True)

    ...

    def save(self):
        body_html=markdown(self.body)
        super(BlogPost, self).save()

    ...

然后在模板中,您可以使用{{body_html|safe}}.

我希望这能让您了解如何更改模型。恐怕我没有关于如何处理遗留 html 数据的建议。

于 2009-08-11T03:10:55.510 回答
2

WMD 不做 Html-to-markdown,反之亦然;您可以使用html2text将 HTML 转换为降价。默认情况下,WMD 仅使用您的第一个文本区域作为降价编辑器,但您可以覆盖它以及添加预览 - 只需按照 WMD 随附的简单示例中的说明进行操作即可。无论如何,API 都在发生变化(值得称赞的是,作者对此并不神秘),因为整个事情都转向了一个更真正的开源概念,所以现在不值得详细解释它,也不值得尝试任何花哨的东西! -)

于 2009-08-11T02:35:59.590 回答
1

使用接受的答案时要小心。默认情况下,标记您的文本不会删除不安全的标签。恶意用户可以轻松插入 html,甚至可以插入脚本标签。在模板中使用 {{body_html|safe}} 意味着执行用户的 html 或脚本。自己试试。

于 2013-08-01T13:43:44.403 回答
0

显然,将旧 HTML 转换为 markdown 是完全没有必要的。我将 django.contrib.markup.markdown 过滤器应用于我的模板,遗留数据库记录中的 HTML 直接通过。非遗留记录中的 Markdown 也正确呈现。

当然,我的 Web 应用程序不允许用户修改这些字段,因此可以让 HTML 直接通过。如果这是一个用户可编辑的字段,如评论或 wiki,则此解决方案是不够的。您必须将安全参数传递给 markdown 模板过滤器,这将去除所有 HTML,并且对于用 HTML 编写的旧帖子,需要进行一些 HTML 到 markdown 的转换。

在这种情况下,另一种解决方案是编写一个新的模板过滤器来包装降价过滤器。它将允许旧的 HTML 帖子通过,但将安全降价过滤器应用于非旧帖子。

于 2009-08-12T14:30:50.263 回答