【问题标题】:django ckeditor won't show on the formdjango ckeditor 不会显示在表单上
【发布时间】:2018-10-28 03:47:02
【问题描述】:

遵循https://django-ckeditor.readthedocs.io/en/latest/ 中提到的每个步骤,但是当我查看表单时,我没有得到任何编辑器。我也确实运行了“python manage.py collectstatic”

ckeditor 特有的settings.py。

INSTALLED_APPS = [
    'ckeditor',
    'ckeditor_uploader',
]

STATIC_URL = '/static/'    
STATIC_ROOT = os.path.join(BASE_DIR,"static")
CKEDITOR_BASEPATH = STATIC_ROOT+"/ckeditor/ckeditor"

CKEDITOR_UPLOAD_PATH = "ck_uploads/"
CKEDITOR_IMAGE_BACKEND = "pillow"

MEDIA_URL = STATIC_URL+'media/'

MEDIA_ROOT = os.path.join(STATIC_ROOT,'media')

urls.py

url(r'^ckeditor/', include('ckeditor_uploader.urls')),

forms.py

from ckeditor.widgets import CKEditorWidget

class BlogPostForm(forms.ModelForm):
    class Meta():
        model = BlogPost
        fields = ('title','brief','content','accept_comments','is_public')

        brief = forms.CharField(widget=CKEditorWidget())
        content = forms.CharField(widget=CKEditorWidget())

到目前为止没有任何建议有效(包括将小部件定义移出 Meta)。

我正在自定义呈现表单,这就是该字段在表单中呈现的方式。

{{ form.details }}

使用{{ form.as_p }} 渲染整个表单也没有任何区别。

这是我使用 Chrome 开发者工具时 HTML 字段显示的内容 --> 元素。

<textarea cols="40" id="id_details" name="details" rows="10" required="" data-processed="0" data-config="{&quot;skin&quot;: &quot;moono-lisa&quot;, &quot;toolbar_Basic&quot;: [[&quot;Source&quot;, &quot;-&quot;, &quot;Bold&quot;, &quot;Italic&quot;]], &quot;toolbar_Full&quot;: [[&quot;Styles&quot;, &quot;Format&quot;, &quot;Bold&quot;, &quot;Italic&quot;, &quot;Underline&quot;, &quot;Strike&quot;, &quot;SpellChecker&quot;, &quot;Undo&quot;, &quot;Redo&quot;], [&quot;Link&quot;, &quot;Unlink&quot;, &quot;Anchor&quot;], [&quot;Image&quot;, &quot;Flash&quot;, &quot;Table&quot;, &quot;HorizontalRule&quot;], [&quot;TextColor&quot;, &quot;BGColor&quot;], [&quot;Smiley&quot;, &quot;SpecialChar&quot;], [&quot;Source&quot;]], &quot;toolbar&quot;: &quot;Custom&quot;, &quot;height&quot;: 291, &quot;width&quot;: 835, &quot;filebrowserWindowWidth&quot;: 940, &quot;filebrowserWindowHeight&quot;: 725, &quot;toolbar_Custom&quot;: [[&quot;Bold&quot;, &quot;Italic&quot;, &quot;Underline&quot;], [&quot;NumberedList&quot;, &quot;BulletedList&quot;, &quot;-&quot;, &quot;Outdent&quot;, &quot;Indent&quot;, &quot;-&quot;, &quot;JustifyLeft&quot;, &quot;JustifyCenter&quot;, &quot;JustifyRight&quot;, &quot;JustifyBlock&quot;], [&quot;Link&quot;, &quot;Unlink&quot;], [&quot;RemoveFormat&quot;, &quot;Source&quot;]], &quot;language&quot;: &quot;en-us&quot;}" data-external-plugin-resources="[]" data-id="id_details" data-type="ckeditortype"></textarea>

【问题讨论】:

    标签: python-3.x django-forms ckeditor5


    【解决方案1】:

    CK 编辑器

    第一步:pip install django-ckeditor

    第二步:INSTALLED_APPS = ['ckeditor',]

    第 3 步:转到 ==> models.py 并添加文本字段 RichTextField

    像这样:

    from ckeditor.fields import RichTextField
    
    class Post(models.Model):
        author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
        title = models.CharField(max_length=200)
        text = RichTextField(blank=True, null=True)
    

    第四步:python manage.py makemigrations and migrate

    第 5 步:现在检查管理页面,ckeditor 在文本字段中应用

    如果要在html文件中添加ckeditor

    第6步:在forms.py

    class PostForm(forms.ModelForm):
        class Meta:
            model = Post
            fields = ('title','text',)
    

    第七步:在html文件中添加两行代码:

    {{ form.text | safe }}
    {{ form.media }}
    

    【讨论】:

      【解决方案2】:

      我推荐这个教程by Samuli Natri。 就我而言,我创建了一个模型:

      from ckeditor.fields import RichTextField
      from ckeditor_uploader.fields import RichTextUploadingField
      
      class Article(models.Model):
          title = RichTextField(blank=True, null=True)
          content = RichTextUploadingField(blank=True, null=True)
          author = models.ForeignKey(User, on_delete=models.CASCADE)
      
          def get_absolute_url(self): #redirects to detail view of this post
              return reverse("post-detail", kwargs={"pk": self.pk})
      
      

      然后在我的 views.py 中,我有不需要创建表单的基于类的视图。

      
      from django.views.generic import(CreateView)
      from .models import Article
      
      class ArticleCreateView(CreateView):
          model = Article
          fields = ['title', 'content']
      
      

      重要的是你的 html 有以下标签

      <form method="POST">
            {% csrf_token %}
            {{ form.media }} <!-- ckeditor thing -->
            {{ form }}
            <button class="btn" type="submit">Post</button> 
      </form>
      

      【讨论】:

        【解决方案3】:

        下面两行你放错了。

        brief = forms.CharField(widget=CKEditorWidget())
        content = forms.CharField(widget=CKEditorWidget())
        

        它们必须在 Meta 类之外,因此将如下所示。

        class BlogPostForm(forms.ModelForm):
        
            brief = forms.CharField(widget=CKEditorWidget())
            content = forms.CharField(widget=CKEditorWidget())
        
            class Meta():
                model = BlogPost
                fields = ('title','brief','content','accept_comments','is_public')
        

        【讨论】:

        • 没有太大区别。
        猜你喜欢
        • 2012-11-28
        • 2017-10-12
        • 2020-06-03
        • 2015-08-20
        • 2022-01-16
        • 1970-01-01
        • 2017-09-04
        • 2014-05-31
        • 2018-05-18
        相关资源
        最近更新 更多