安全过滤器仍显示HTML标签

时间:2019-10-02 01:27:21

标签: django django-views ckeditor

我已将CKEditor添加到我的django项目中,但文本仍显示HTML标签。尽管我在我的内容变量之后插入了安全过滤器。我是否错过了不能逃脱HTML标记的原因?

这是我的模特:

# Use only if 'None' is an actual string in your data
df = df.replace('None', np.nan)


df['suburb'] = df['suburb'].where(~df.suburb.isnull(), df.street.str.split().str[1])
df['postcode'] = df['postcode'].where(~df.postcode.isnull(), df.street.str.split().str[2])
df['street'] = df['street'].str.split().str[0]

df.head()

| id | street | suburb | postcode | timeStamp |
|----|--------|--------|----------|-----------|
| A1 | aa     | BB     | 001      | 2016      |
| A1 | aa     | BB     | 001      | 2019      |

df.drop_duplicates(subset=['id', 'street', 'suburb', 'postcode'], keep='last')

| id | street | suburb | postcode | timeStamp |
|----|--------|--------|----------|-----------|
| A1 | aa     | BB     | 001      | 2019      |

这是我的表单模板:

class Post(models.Model):
    title = models.CharField(max_length = 100)
    content = RichTextUploadingField(blank=True, null=True)
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    image = models.ImageField(default='default.jpg', upload_to='post_pics')

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('post-detail', kwargs={'pk': self.pk})

这是我的帖子详细信息模板:

    <form method="POST" enctype="multipart/form-data">
        {% csrf_token %}
        <fieldset class="form-group">
            <legend class='border-bottom mb-4'>New Post</legend>
            {{ form.media }}
            {{ form | crispy }}
        </fieldset>
        <div class="form-group">
            <button type="submit" class="btn btn-outline-info">Upload</button>
            <a type="submit" class="btn btn-outline-secondary" href="/">Cancel</a>
        </div>
    </form>

在我的表单页面上,它使我可以看到应该显示的文本。但是,在详细视图模板上,它仍显示HTML标签和样式,而不是格式文本。

2 个答案:

答案 0 :(得分:0)

我弄清楚了原因。经过一番搜索后,我意识到变量内容被包装到Image3D image2{10, std::vector<std::vector<char>>(10, std::vector<char>(10, 0))}; Image3D image2 = Image3D(10, std::vector<std::vector<char>>(10, std::vector<char>(10, 0))); 标签中的变量发送到浏览器,而嵌套的段落标签是不正确的HTML。

答案 1 :(得分:0)

我也面临同样的问题,问题是:

当你有多个 CKEditor 内容要显示在同一个网页中时,那么只有最上面的一个可以正常显示,而其余的“<p {{ content_of_ckeditor|safe }}</p>”会显示一些 HTML 文本......不是正确的内容。

在你的 views.py 中,在将 CKEditor 内容保存到模型之前,如果你有这样的:

    content_save = ckeditorForm(request.POST, request.FILES)
    content_save = ModelName(content=content, user=user, post=post)
    content_save.save()

然后就不能正常显示了,改成

    content_save = ckeditorForm(request.POST, request.FILES)
    content_save = ModelName(content=content, user=user, post=post)
    content_save = content_save['content'].value()    #add this
    content_save.save()

因此,当您在模板中使用 <p {{content_of_ckeditor|safe}} </p> 时,它会正确显示。