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

Django集成Google Gemini API后HTML格式丢失及**符号问题求助

问题解决:Gemini API响应在HTML渲染中格式异常修复

核心原因

Gemini API返回的是Markdown格式内容,终端能自动解析Markdown的换行、加粗语法,但直接将原始文本存入数据库后渲染到HTML时,浏览器不会识别Markdown语法,导致段落间距丢失(Markdown换行需转成<p>标签或<br>),**符号直接显示而非转为加粗样式。

解决步骤

1. 安装Markdown转换库

使用Python的markdown库将Gemini返回的Markdown文本转为HTML,自动处理段落和加粗语法:

pip install markdown

2. 在模型/视图中处理格式转换

方式1:模型中添加格式化方法(推荐)

修改你的模型,添加方法将原始Markdown转为HTML,保留原始数据的同时支持渲染:

from django.db import models
import markdown
import re

class YourModel(models.Model):
    gemini_response = models.TextField()
    # 其他字段...

    def get_formatted_response(self):
        # 先清理未闭合的**符号(若Gemini返回格式不规范)
        cleaned_content = re.sub(r'\*\*(?!\w|\s\w)', '', self.gemini_response)
        cleaned_content = re.sub(r'(?<!\w|\w\s)\*\*', '', cleaned_content)
        # 将Markdown转为HTML
        return markdown.markdown(cleaned_content)

方式2:视图中转换后传递给模板

如果不想修改模型,可在视图中完成转换:

from django.shortcuts import render
import markdown
import re

def your_view(request):
    instance = YourModel.objects.get(...)
    # 清理+转换格式
    cleaned_content = re.sub(r'\*\*(?!\w|\s\w)', '', instance.gemini_response)
    cleaned_content = re.sub(r'(?<!\w|\w\s)\*\*', '', cleaned_content)
    formatted_response = markdown.markdown(cleaned_content)
    return render(request, 'your_template.html', {'formatted_response': formatted_response})

3. 模板中安全渲染HTML

在HTML模板中使用|safe过滤器,告诉Django不要转义已生成的HTML标签:

<!-- 对应模型方法的写法 -->
<div class="response-container">
    {{ your_instance.get_formatted_response|safe }}
</div>

<!-- 对应视图转换的写法 -->
<div class="response-container">
    {{ formatted_response|safe }}
</div>

4. 用CSS确保段落间距

为转换后的HTML段落添加间距,避免浏览器默认样式导致无间隔:

.response-container p {
    margin-bottom: 1.2rem;
    line-height: 1.6;
}

内容的提问来源于stack exchange,提问作者Dev Yash

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 03:59:54