如何将Web应用程序从HTML切换到Markdown?

时间:2009-08-11 02:08:42

标签: html django markdown wmd

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

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

这里的正确行动是什么?

4 个答案:

答案 0 :(得分:4)

正如我在your other question上提到的,使用markdown时的一个好模式是在数据库中以markdown html格式存储文本。这样,每次查看页面时都不需要转换为html,并且很容易在管理员中编辑原始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数据的建议。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

使用接受的答案时,

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

答案 3 :(得分:0)

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

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

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