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
相关产品推荐
相关产品推荐

