2

TinyMCE エディターの複数のインスタンスを含む単一の HTML ページを作成しようとしています。編集者の数はリクエストによって異なります。そのため、それらを列挙して個別に初期化することはできません。これが私のコードです:

ビュー.py:

from tinymce.widgets import TinyMCE
class ThreadForm(forms.Form):
    subject = forms.CharField(max_length=300, widget=forms.TextInput(attrs={'size':'100'}))
    body = forms.CharField(widget=TinyMCE())
class MessageForm(forms.Form):
    thread_pk = forms.IntegerField()
    body = forms.CharField(widget=TinyMCE())

urls.py:

urlpatterns = patterns('',
    ...
    url(r'^tinymce/', include('tinymce.urls')),
)

settings.py:

INSTALLED_APPS = (
    ...
    'tinymce',
)
...
TINYMCE_DEFAULT_CONFIG = {
    'selector': 'textarea',
    'theme': 'advanced',
    'width': 600,
    'height': 300,
    'theme_advanced_toolbar_location': 'top',
    'theme_advanced_buttons1': 'bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,bullist,numlist,|,outdent,indent,hr,|,undo,redo',
    'theme_advanced_buttons2': 'cut,copy,paste,pastetext,pasteword,|,search,replace,|,link,unlink,charmap,|,visualaid,table,|,blockquote,sub,sup,|,preview,code,emotions,image',
    'theme_advanced_buttons3': '',
    'plugins': 'paste,table,spellchecker,searchreplace,emotions',
    'theme_advanced_resizing': True,
}

member_forums.html:

...
{% block headers %}
{{ thread_form.media }}
{% endblock %}
...
<table id="new_thread_table">
    {{ thread_form.as_table }}
</table>
...
{% for message_form in message_forms %}
    <table class="new_message_table">
        {{ message_form.as_table }}
    </table>
    ...
{% endfor %}

テンプレートには 1 つの ThreadForm と複数の MessageForms があります。

HTML で MessageForms をコメント アウトすると、ThreadForm は機能しているように見えますが、コメントを外すと、ThreadForm が更新されない TinyMCE スキンをロードします (テキストを追加しても、元に戻すボタンが有効になっているように見えません)。 )、フォームを送信すると、フォームの本文エントリが欠落し、form.is_valid失敗します。

私はテンプレートヘッダーにのみあり{{ thread_form.media }}、MessageForms には何もありません。以下を繰り返す:

{% for message_form in message_forms %}
    {{ message_form.media }}
{% endfor %}

も何の役にも立ちませんでした。

いくつかの調査を行った後、MessageForms が読み込まれるときに TinyMCE が初期化される回数が多すぎて、フォームの送信中にデータが失われるようです ( Django を使用した TinyMCE: "This field is required"に対するトップの回答の編集) 。

これを機能させる方法がわかりません。ヘルプやポインタをいただければ幸いです。

4

3 に答える 3

1

Django-TinyMCE を削除し、TinyMCE 4.0.21 の使用を開始しました。今では見事に機能しています。

ビュー.py:

...
class ThreadForm(forms.Form):
    subject = forms.CharField(max_length=300, widget=forms.TextInput(attrs={'size':'100'}))
    body = forms.CharField(widget=forms.Textarea(attrs={'class':'thread'}))
...

member_forums.html:

...
{% block headers %}
<script type="text/javascript" src="{% static 'tinymce/tinymce.min.js' %}"></script>
<script type="text/javascript" src="{% static 'tinymce/threads.js' %}"></script>
{% endblock %}

{% block content %}
    ...
    <form id="new_thread_form" method="post" action="">
        {% csrf_token %}
        <table id="new_thread_table">
            {{ thread_form.as_table }}
        </table>
    </form>
    ...
    <form class="new_message_form" method="post" action="">
    {% csrf_token %}
    {% for message_form in message_forms %}
        {{ message_form.thread_pk }}
        <textarea class="message" name="body"></textarea>
    {% endfor %}
    ...
{% endblock %}

スレッド.js:

tinyMCE.init({
    selector: "textarea.thread",
    theme: "modern",
    ...
});

tinyMCE.init({
    selector: "textarea.message",
    theme: "modern",
    ...
});
于 2014-04-02T21:34:40.637 に答える
0

TinyMCE は id を使用して、どのテキストエリアが TinyMCE であるべきかを割り当てます。ID は HTML 内で一意であると想定されています。私のボディは両方ともボディと呼ばれていたため、Django の form.as_table は同じ ID でレンダリングしていました。TinyMCE がエディタを ID に割り当てようとしたとき、同じ ID を持つ 2 番目のフィールドに到達したときに失敗しました。同様の問題:

2 つのテキストエリアを読み込むと TinyMCE が機能しない

MessageForm.body を MessageForm.body1 に変更したことで、ThreadForm TinyMCE が魅力的に機能するようになりました。ここで、各 MessageForm の ID を反復して変更する必要があります。しかし、より良い解決策があるはずです。TinyMCE はすべてのテキストエリアをレンダリングできるはずです。多分IDを完全に削除しますか?

于 2014-04-01T09:03:35.223 に答える