9

这是一个简短的问题:

我的博文在...

http://www.seanbradley.biz/blog

...完全没有格式。它们只是一大块明文。任何代码或 HTML 标记,例如 /n 或 <br/>……更不用说 h1、h2 等……对文本在页面上的显示方式没有明显的影响。

我正在使用部署在 GAE 上的 WTForms 运行 Flask。我怎样才能解决这个问题?有没有办法在新博客文章条目的表单字段中实现 WYSGIWYG 编辑器(如 TinyMCE)?

我要看起来像...一样简单优雅

http://www.quietwrite.com

或者

http://lucumr.pocoo.org/

...或者至少类似于 Stackoverflow 自己的编辑器。

在发布时,上述所有帖子中的格式都会呈现(而不是通过编辑器的过度夸大的工具栏)。

我不确定在我的帖子中禁止呈现 HTML 标签的内容是否与 WTForms 中的类的自定义有关,或者必须在 GAE 的数据存储中特殊处理的内容,或者我需要在 Flask 中修复的内容(例如,帖子)。任何关于我(作为一个相对初级的开发人员)如何将格式整合到这些博客文章中的明确解决方案都可以获得赏金。下面应用程序中的特定代码...

注意:还有一个 Flask-Markdown 扩展,但我同样不确定如何集成它以达到我想要的效果。


详细的问题,以及代码库中的片段

我在 Google App Engine 上运行 Flask(当然,使用 Jinja 模板/Werkzeug 路由),并且对如何将所见即所得编辑器集成到我专门用于博客文章的页面中感到困惑......

我假设,如果合并 TinyMCE,对 JavaScript 的调用会出现在模板的标题中......就像这样:

<script type="text/javascript" src="/static/js/tiny_mce/tiny_mce.js">



但是,然后 - 因为,就其本身而言,模板或呈现的页面本身没有,这不仅仅是- 根据 TinyMCE 的安装文档 - 还将以下代码块添加到模板中......

<textarea cols="80" rows="10" id="articleContent" name="articleContent">
  &lt;h1&gt;Article Title&lt;/h1&gt;
  &lt;p&gt;Here's some sample text&lt;/p&gt;
</textarea>

<script type="text/javascript">
tinyMCE.init({
  theme : "advanced",
  theme_advanced_toolbar_location : "top",
  theme_advanced_toolbar_align : "left",
  mode : "exact",
  elements : "articleContent"
});
</script>



目前,在模板文件的标签内......

<label for="title">{{ form.title.label }}</label>

{{ form.title|safe }}

{% if form.title.errors %}
    <ul class="errors">
        {% for error in form.title.errors %}
        <li>{{ error }}</li>
        {% endfor %}
    </ul>
{% endif %}

<label for="prose">{{ form.prose.label }}</label>

{{ form.prose|safe }}

...more WTForm validation / error handling...



我怀疑问题出在通过 WTForms 构建/管理表单的方式上。WTForms 位于我的 /packages/flaskext 目录中。某处是否需要以下内容...?

class wtforms.fields.TextAreaField(default field arguments, choices=[], coerce=????????, option_widget=????????)


但是 TextAreaField 是从(我不知道在哪里)导入的......并且不知道这是否是正确的地方/东西来调整。答案是否在 WTForm 模块的init .py、file.py 和/或 html5.py 中?

同样,如果我在帖子中包含的 HTML 标记在发布时呈现出来,我会很高兴……但是,让不习惯 HTML 的人更容易格式化他们的帖子的巧妙方法将受到双重赞赏。任何为我指明正确方向的帮助都非常感谢!

如果需要,添加代码如下...



我的models.py中有以下课程...

class PostModel(db.Model):
    """New Post Model"""
    title = db.StringProperty(required = True)
    prose = db.TextProperty(required = True)
    when = db.DateTimeProperty(auto_now_add = True)
    author = db.UserProperty(required = True)



我的forms.py中的以下课程...

class PostForm(wtf.Form):
    title = wtf.TextField('Title: something buzz-worthy...', validators=[validators.Required()])
    prose = wtf.TextAreaField('Content: something beautiful...', validators=[validators.Required()])
4

1 回答 1

5

让您的 HTML 进行 HTML 编码的问题很可能是在呈现时而不是在编写时发生的问题。当您收到数据并将其保存在数据存储区中时,如果您的 HTML 仍然是 HTML 而不是 HTML,&lt;tag&gt;那么您需要将渲染标记为安全:

{% for post in posts %}
<h2>{{ post.title | safe }}<h2>
<article>{{ post.content | safe }}</article>
{% endfor %}

此外,在 WTForms 中,Field.Label(如 中form.prose.label)实际上呈现了一个完整的标签(无需将对它的调用包装在预呈现的标签中。)

于 2012-04-05T05:46:40.197 回答