【问题标题】:WMD Preview Doesn't Match OutputWMD 预览与输出不匹配
【发布时间】:2010-12-24 06:13:41
【问题描述】:

我在谷歌应用程序情况下使用 WMD,站点管理员可以更新站点页面并且用户可以看到信息。

预览功能工作正常,我可以按照我希望的方式查看文本,但是当我在用户部分时,返回的降价是没有格式的 - 我该如何解决这个问题?

这是我正在使用的代码

{% block content-left %}
            {% if is_admin %}
            <div id="content-bodyleft" class="wmd-preview"></div>
            <form action="/admin/content/" method="post">
                <textarea id="markdown" name="markdown" style="width: 400px; height: 200px;" >{{ page_content.html }}</textarea>
                <input name="page" type="hidden" value="{{ request.path }}" />
                <input type="submit" name="Save" />
            </form>
<div class="wmd-output"></div>
            <script type="text/javascript">
                // to set WMD's options programatically, define a "wmd_options"
                // object with whatever settings
                // you want to override.  Here are the defaults:
                wmd_options = {
                    // format sent to the server.  Use "Markdown" to return the markdown source.
                    output: "Markdown",

                    // line wrapping length for lists, blockquotes, etc.
                    lineLength: 40,

                    // toolbar buttons.  Undo and redo get appended automatically.
                    buttons: "bold italic | link blockquote code image | ol ul heading hr",

                    // option to automatically add WMD to the first textarea found.
                    // See apiExample.html for usage.
                    autostart: true
                };
            </script>
<div class="wmd-output"></div>
            <script type="text/javascript" src="/static/wmd/wmd.js"></script>
            {% else %} 

{{ page_content.html|markdown }}

           {% endif %}

【问题讨论】:

  • 我检查了 wmd.js,它也被设置为输出 HTML

标签: python django google-app-engine markdown wmd


【解决方案1】:

发生这种情况的原因是因为 Django 表单只能看到代表 WMD 编辑器的 &lt;textarea&gt; 标记的值。该值是实际的降价,而不是您在预览中看到的呈现的 HTML。

有几种方法可以解决这个问题,无论是在客户端还是在服务器上......

  1. 保存表单后,在服务器上使用 python markdown 模块将 markdown 转换为 HTML,like this one

  2. 在客户端提交表单时,让 javascript 将 WMD &lt;textarea&gt; 标记的值替换为实际的 HTML

选项#1 可能是最简单的。这是一些示例代码...

import markdown

class MyModel(models.Model):
    text = models.TextField()

    def save(self, force_insert=False, force_update=False):
        if self.text:
            self.text = markdown.markdown(self.text)

        super(MyModel, self).save(force_insert, force_update)

【讨论】:

  • 感谢这个有意义的回复 - 但我应该在哪里安装这段代码?
【解决方案2】:

这似乎与 WMD.js 没有任何关系,WMD.js 是一个编辑器,与显示内容无关。

您没有发布模型,但看起来您正在将内容输入“markdown”字段,但显示的是不同的字段“html”。我想你的模型中有一些东西 - 也许在保存时 - 用转换后的标记填充那个 html 字段?

您还确定看到的是原始降价,还是看到的是原始 HTML?我假设您需要取消转义 html 输出:

{{ page_content.html|safe }}

【讨论】:

    【解决方案3】:

    这是我的 models.py 文件

    # models.py
    from google.appengine.ext import db
    
    class GoogleToken(db.Model):
        session_token = db.StringProperty()
        scope_url = db.StringProperty()
        added_on = db.DateTimeProperty(auto_now_add=True)
    
    class PageContent(db.Model):
        html = db.TextProperty()
        page = db.StringProperty()
    
    class PageMedia(db.Model):
        name = db.StringProperty()
        type = db.StringProperty()
        content = db.BlobProperty(default=None)
    
    class Announcement(db.Model):
        title = db.StringProperty()
        content = db.TextProperty()
        added_on = db.DateTimeProperty(auto_now_add=True)
    

    这是来自views.py

    def content(request):
        html = request.POST.get('markdown', None)
        page = request.POST.get('page', None)
    
        logging.debug(html)
        logging.debug('Page: %s' % page)
    
        query = PageContent.all().filter('page =', page)
        page_content = query.get()
        if page_content == None:
            page_content = PageContent(html=html,page=page)
        else:
            page_content.html = html
    

    为了帮助您了解正在发生的事情,例如我正在输入

    Title
    ----
    *Subtitle*
    
    Text text text 
    

    看到

    标题

    副标题

    文字文字文字

    在预览中,但在输出中我看到了

    Title----*Subtitle*Text text text 
    

    谢谢,非常感谢您对此提供的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      相关资源
      最近更新 更多