You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Ajax创建帖子后如何以纯文本更新Div?

解决Ajax新增帖子时HTML标签被渲染的问题

这问题我之前开发类似功能时也踩过坑!核心原因很简单:你当前用html()方法插入新帖子内容,它会把传入的字符串当作HTML代码解析渲染,而页面刷新后Django模板默认会自动转义HTML特殊字符,所以才会出现“提交后渲染成格式、刷新后显示原始文本”的不一致情况。

最快的修复方案:改用text()方法插入内容

直接修改你Ajax回调里的代码,把解析HTML的html()换成纯文本插入的text():

success: function(data){
    $('#id_title').val('');
    console.log(data.title);
    // 把html()改成text(),确保内容以纯文本形式展示
    $('#post_title_content').text(data.title);
    // 如果是要把新帖子追加到列表末尾(而不是替换现有内容),可以用下面的写法:
    // $('#post_title_content').append($('<div class="post-item">').text(data.title));
},

为什么这样有效?

text()方法会自动将字符串中的HTML特殊字符(比如<、>、&)转义成对应的HTML实体(&lt;、&gt;、&amp;),浏览器收到这些实体后会直接显示原始字符,而不会把它们当作HTML标签解析渲染。

可选的后端补充方案(双重保险)

如果你想在后端也做一层转义,避免前端万一出错导致的XSS风险,可以在Django视图里对标题进行HTML转义:

from django.utils.html import escape

def post_create_ajax(request):
    if request.is_ajax() and request.method == 'POST':
        title = request.POST.get('the_post')
        author = request.user
        post = Post(title=title, author=author)
        post.save()
        # 转义后再返回
        return JsonResponse({'title': escape(title)})

这样即使前端不小心用了html(),也会显示纯文本。不过更推荐前端用text()的方案,因为展示层的逻辑交给前端处理更合理。

内容的提问来源于stack exchange,提问作者Bidhan Majhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 06:23:11