在Flask / WTForms / Google App Engine中格式化博客文章
简单的问题如下:
我的博客文章在...
http://www.seanbradley.biz/blog
...完全缺乏格式。 它们只是一大块明文。 任何代码或HTML标记(例如/ n或...更不用说h1,h2等)对文本在页面上出现的方式没有明显影响。
我正在GAE上部署的WTForms上运行Flask。 我怎样才能解决这个问题? 有没有一种方法可以将WYSGIWYG编辑器(如TinyMCE)实施到新的博客文章条目的表单字段中?
我正在寻找一个简单而优雅的样子......
http://www.quietwrite.com
要么
http://lucumr.pocoo.org/
...或者至少类似于Stackoverflow自己的编辑器。
在发布时(而不是通过编辑器的grody夸张的工具栏),格式化会在上述所有帖子中呈现。
我不确定是否禁止在我的帖子中呈现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">
<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格式的用户来说,轻松的方式可以让用户更容易地理解。 任何帮助指引我在正确的方向是超级赞赏!
Add'l代码,如果需要,请遵循...
我在我的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()])
将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
)实际上呈现完整标签(无需在预先呈现的标签中包装调用它)。
上一篇: Formatting a blog post in Flask / WTForms / Google App Engine