2009-08-11 50 views
2

我有一个Django支持的网站。目前,所有的文本字段都只是原始的HTML文本输入。我没有花哨的编辑器或任何东西。我想开始使用Markdown和WMD来让每个人都更容易。如何将Web应用程序从HTML切换到Markdown?

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

这里的正确做法是什么?

回答

0

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

当然,我的web应用程序不允许用户修改这些字段,所以让HTML直接通过是可以的。如果这是一个用户可编辑的字段,比如评论或维基,那么这个解决方案是不够的。您必须将安全参数传递给markdown模板过滤器,该过滤器将去除所有HTML,并且对于使用HTML编写的传统帖子,需要一些HTML到降价转换。

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

2

大规模杀伤性武器不会做Html到降价,只反之亦然;您可以使用html2text将HTML转换为降价。 WMD默认只使用你的第一个文本区域作为降价编辑器,但你可以覆盖它并添加预览 - 只需按照WMD附带的简单示例中的说明操作即可。无论如何,API正在发生变化(作为他的信用,作者并没有对此有任何疑问),因为整体事情转变为更加真实的开源概念,所以现在不需要详细解释它,也不会尝试任何幻想! - )

4

正如我在your other question中提到的那样,使用降价时的一个很好的模式是在数据库中以markdown html格式存储文本。这样,每次查看页面时都不需要转换为html,并且可以轻松地在管理员中编辑原始减价。

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

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

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

相关问题