这是简单的问题:
我的博客文章位于...
http://www.seanbradley.biz/blog
...完全缺乏格式。它们只是纯文本的一大块。任何代码或HTML标记(例如/n或
...更不用说h1,h2等)对文本在页面上的显示方式没有明显的影响。
我正在运行Flask,并在GAE上部署了WTForms。我怎样才能解决这个问题?有没有办法在新的博客文章条目的表单字段中实现WYSGIWYG编辑器(如TinyMCE)?
我要看起来像...一样简单而优雅
http://www.quietwrite.com
或者
http://lucumr.pocoo.org/
...或至少类似于Stackoverflow自己的编辑器。
在发布时,格式会在以上所有内容的帖子中呈现(而不是通过编辑器的肮脏,过分夸大的工具栏)。
我不确定禁止在帖子中呈现HTML标签的内容是否与WTForms中的类的自定义有关,还是与GAE的数据存储中必须特别对待的内容有关,还是与我需要在Flask中修复的内容有关(例如,用于帖子)。关于我(作为一个相对初级的开发人员)如何将格式整合到这些博客文章中的任何明确解决方案都可以得到赏金。来自以下应用的特定代码...
注意:还有一个Flask-Markdown扩展,但是我不确定如何集成它来达到我想要的效果。
详细的问题,以及代码库中的片段
我在Google App Engine上运行Flask(当然有Jinja模板/Werkzeug路由),并对如何将WYSIWYG编辑器集成到我专门写博客的页面中感到困惑...
我假设,如果合并TinyMCE,则对JavaScript的调用将进入模板的 header 中,如下所示:
<script type="text/javascript" src="/static/js/tiny_mce/tiny_mce.js">
但是,然后-因为就其本身而言,模板内或呈现的页面本身没有任何内容,所以它只是而不是-根据TinyMCE的安装文档-还要在模板中添加以下代码块...
<textarea cols="80" rows="10" id="articleContent" name="articleContent">
<h1>Article Title</h1>
<p>Here's some sample text</p>
</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)...
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()])
最佳答案
使HTML进行HTML编码的问题很可能是在渲染时而不是在编写时发生的问题。如果您的HTML仍然是HTML而不是<tag>
,则当您收到数据并将其重新保存在数据存储区中时,您需要将呈现标记为安全:
{% for post in posts %}
<h2>{{ post.title | safe }}<h2>
<article>{{ post.content | safe }}</article>
{% endfor %}
另外,在WTForms中,
Field.Label
(如form.prose.label
)实际上呈现完整的标签(无需将对其的调用包装在预呈现的标签中。)关于tinymce - 在Flask/WTForms/Google App Engine中设置博客帖子的格式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9918154/