0

我在谷歌应用程序的情况下使用 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 %}
4

3 回答 3

2

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

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

  1. 保存表单后,在服务器上使用 python markdown 模块将 markdown 转换为 HTML,就像这个

  2. 在客户端提交表单时,让 javascript 将 WMD<textarea>标记的值替换为实际的 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)
于 2009-12-10T18:44:00.910 回答
1

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

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

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

{{ page_content.html|safe }}
于 2009-12-08T09:13:11.873 回答
0

这是我的 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 

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

于 2009-12-09T01:33:59.227 回答