【问题标题】:Rendering ckeditor widget with model fields in django template在 django 模板中使用模型字段渲染 ckeditor 小部件
【发布时间】:2026-01-31 19:50:01
【问题描述】:

我正在尝试使用模型字段和 ckeditor wiget 创建模板,但我无法在 html 中呈现字段,而是显示一个没有错误的空白页面

这是我的forms.py

 from django import forms
 from app.models import BlogPost
 from ckeditor.widgets import CKEditorWidget

class BlogForm(forms.ModelForm):
    title = forms.CharField(required=True)
    body = forms.CharField(widget=CKEditorWidget())
    tags = forms.CharField(required=True)


    class Meta:
        model = BlogPost

models.py

from django.db import models
from ckeditor.fields import RichTextField


class BlogPost(models.Model):
    title = models.CharField(max_length=70)
    body = RichTextField()
    tags = models.CharField(max_length=10)

views.py

def write_post(request):
    blog_form=BlogForm()
    return render(request,'write_post.html',{'blog_form':blog_form})

write_post.html

{%block content%}
{% load staticfiles %}<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script type="text/javascript" src="{% static "ckeditor/ckeditor/ckeditor.js" %}"></script>
</head>

<div>
    <h1>Create a Post</h1>

    <form action="/submit" method="post">
        {% csrf_token %}
        <div>
           {{ form.title }}
           {{ form.body }}
           {{ form.tags }}
        </div>
        <input type="submit" value="Post">
     </form>
 </div>

 {% endblock %}

此外,我已将“ckeditor”、应用程序添加到 settings.py 并以正确的方式配置了所有静态 url。

当我只尝试在模板中仅渲染 ckeditor-widget 时,我没有任何问题,一切都很完美

空白 -- write_post.html(输出)

【问题讨论】:

  • {{ form.as_p }} 是否显示表单? (感谢您可能不想要 as_p 格式,只是想看看有什么用
  • 这对我来说甚至都不起作用,当我只尝试渲染没有模型字段的 ckeditor 小部件时它起作用了
  • 不使用ckeditor会渲染表单吗?
  • 是的。当我在模板中使用 for 循环渲染字段时,' {% for field in blog_form %} {{ field }} {% endfor %}' 并且在我使用上述内容时没有完成

标签: django django-forms django-templates ckeditor


【解决方案1】:

编辑您的表单并添加 form.media,如下所示:

<form action="/submit" method="post">
    {% csrf_token %}
    <div>
       {{ form.media }}
       {{ form.title }}
       {{ form.body }}
       {{ form.tags }}
    </div>
    <input type="submit" value="Post">
 </form>

【讨论】:

    【解决方案2】:

    仅作记录。我也有同样的问题。由于低端 python 版本需要更好的稳定版本的 Django。只需使用 pip django-ckeditor 安装即可。这应该足够了。如果没有,安装 Django==1.8.16

    【讨论】: