9

質問の要約は次のとおりです。

私のブログの投稿先...

http://www.seanbradley.biz/blog

...完全に書式設定がありません。それらは平文の大きなブロックにすぎません。/n や < br /> などのコードや HTML タグは、h1、h2 などはもちろん、ページ上でのテキストの表示方法に明確な影響を与えません。

GAE にデプロイされた WTForms で Flask を実行しています。どうすればこれを修正できますか? TinyMCE のような WYSGIWYG エディタを新しいブログ投稿エントリのフォーム フィールドに実装する方法はありますか?

シンプルでエレガントな外観を目指しています...

http://www.quietwrite.com

また

http://lucumr.pocoo.org/

...または、少なくとも Stackoverflow 独自のエディターに似たもの。

フォーマットは、公開時に上記のすべての投稿でレンダリングされます (エディターの誇張されたツールバーを介するのではなく)。

投稿での HTML タグのレンダリングを妨げているのは、WTForms のクラスのカスタマイズに関連しているのか、GAE のデータストアで特別に処理する必要があるものなのか、Flask 内で修正する必要があるものなのか (たとえば、投稿)。比較的若い開発者である私が、これらのブログ投稿にフォーマットを組み込む方法について明確な解決策があれば、賞金を獲得できます。以下のアプリからの特定のコード...

注: Flask-Markdown 拡張機能もありますが、必要な効果を得るためにそれを統合する方法についても同様に確信が持てません。


質問の詳細と、コード ベースのスニペット

私は Google App Engine で Flask (もちろん、Jinja テンプレート / Werkzeug ルーティングを使用) を実行していますが、ブログ投稿専用のページに WYSIWYG エディターを統合する方法について混乱しています...

私は、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 に慣れていない人が同様に投稿をフォーマットするのを簡単にする巧妙な方法は、2 倍高く評価されます。私を正しい方向に向ける助けは非常に高く評価されています!

追加コードは、必要に応じて続きます...



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 であり、そうでない場合にデータを受け取ってデータストアに保持する場合、&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 に答える