0

サイト管理者がサイトのページを更新し、ユーザーが情報を見ることができる Google アプリの状況で 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 マークダウン モジュールを使用して、サーバー上でマークダウンを 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 とは何の関係もないようです。

モデルを投稿していませんが、「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 に答える