Предварительный просмотр оружия массового поражения не соответствует выводу - PullRequest
0 голосов
/ 08 декабря 2009

Я использую WMD в ситуации, когда приложение Google может обновлять страницы сайта, а пользователи видят информацию.

Функция предварительного просмотра работает нормально, и я могу видеть текст так, как я хочу, чтобы он отображался, но когда я в разделе пользователей, уценка возвращается без форматирования - как я могу это исправить?

Это код, который я использую

{% 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 %}

Ответы [ 3 ]

2 голосов
/ 10 декабря 2009

Причина, по которой это происходит, заключается в том, что форма Джанго видит только значение тега <textarea>, представляющего редактор ОМУ. Это значение является фактической уценкой, а не отображаемым HTML, который вы видите в предварительном просмотре.

Есть несколько способов исправить это на клиенте или на сервере ...

  1. Когда форма сохранена, преобразуйте уценку в HTML на сервере с помощью модуля разметки Python, , как этот

  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)
1 голос
/ 08 декабря 2009

Похоже, это не имеет никакого отношения к WMD.js, который является редактором и не имеет ничего общего с отображением контента.

Вы не публикуете свои модели, но похоже, что вы вводите контент в поле «markdown», но отображаете другое поле «html». Я предполагаю, что у вас есть что-то в ваших моделях - возможно, при сохранении - что заполняет это HTML-поле преобразованной разметкой?

Также вы уверены, что видите необработанную уценку, или вы видите необработанный HTML? Я хотел бы предположить, что вам нужно будет удалить вывод html:

{{ page_content.html|safe }}
0 голосов
/ 09 декабря 2009

Это мой файл 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 

Спасибо, я ценю вашу помощь с этим.

...