【问题标题】:django-ckeditor render full widget instead my custom widgetdjango-ckeditor 呈现完整的小部件而不是我的自定义小部件
【发布时间】:2016-11-07 09:58:18
【问题描述】:

我在我的设置中为使用 ckeditor 的用户定义了一些自定义小部件。在一个页面中,我尝试使用此自定义模板,但它没有显示自定义小部件,而是显示完整的小部件。

在这种情况下,我使用一种来自 ajax 请求的表单。

我的模特:

class Comment(models.Model):
    content = models.CharField(max_length=settings.COMMENT_TEXT_LIMIT if hasattr(settings, "COMMENT_TEXT_LIMIT") else 10000)

我的表格:

class CreateCommentForm(IdeiaForm):
    content = forms.CharField(
    max_length=settings.COMMENT_TEXT_LIMIT if hasattr(settings,     "COMMENT_TEXT_LIMIT") else 10000,
    required=True,
    widget=forms.Textarea(attrs={'data-config': json_encode(getattr(settings, 'CKEDITOR_CONFIGS', None)['comment'])}))

还有我的 HTML 文件:

<textarea id="text_area_content" name="content" class="form-control" placeholder="Deixe seu comentário" data-url-login="{% url 'account:is_logged' %}" data-trigger="login" data-token="{{ csrf_token }}"></textarea>

我的设置.py:

CKEDITOR_CONFIGS = {
    'default': {
        'toolbar': 'Basic',
    },
    'comment': {
        'toolbar': 'Custom',
        'toolbar_Custom': [
            ['Bold', 'Italic'],
            ['CodeSnippet'],
        ],
        'entities': False,
        'extraPlugins': ','.join([
            'autolink', 'dialog',
            'codesnippet','autogrow','placeholder',
    ]),
},

}

【问题讨论】:

  • 另一个不相关的注释以同样的方式:这一行:json_encode(getattr(settings, 'CKEDITOR_CONFIGS', None)['comment'] 将引发KeyError 如果'CKEDITOR_CONFIGS' 未定义它可能应该是json_encode(getattr(settings, 'CKEDITOR_CONFIGS', {}).get('comment') 而不是
  • 你是什么意思“来自 AJAX 请求的表单”可能附上你的视图?

标签: javascript django django-ckeditor


【解决方案1】:

如果我了解您想要实现的目标,文档中提到您可以在 RichTextField 或例如在使用 CKEditorWidget 时引用您的 自定义 CKEditor 设置

from ckeditor.widgets import CKEditorWidget


class CreateCommentForm(IdeiaForm):
    content = forms.CharField(
        max_length=getattr(settings, "COMMENT_TEXT_LIMIT", 10000),
        required=True,widget=CKEditorWidget(config_name='comment')
    )

然后,您必须确保使用模板标签(如@jaap3 的答案)呈现表单,更新文档示例,并假设您将表单作为form = CreateCommentForm() 传递给视图:

<form>
    {{ form.media }}
    {{ form.as_p }}
    <input type="submit"/>
</form>

【讨论】:

    【解决方案2】:

    我假设你所说的 HTML 文件是一个 Django 模板。

    看来您实际上并没有使用您在表单中定义的文本区域。所以没有使用自定义的data-config属性。

    如果您可以访问模板中的表单,您应该使用{{ form.text_area_content }} 来呈现您定义的字段。

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 2021-12-02
      • 2011-12-16
      • 2011-08-30
      • 2021-09-30
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      相关资源
      最近更新 更多