Django提交保存Markdown文件后出现多余空行问题求助
问题
在Django项目中,页面的textarea用于输入Markdown文本,提交后保存到独立文件时会出现多余空行。
相关代码
views.py
from django.shortcuts import render from django.core.files.base import ContentFile from django.core.files.storage import default_storage def index(request): if request.method == "POST": save_data(request.POST.get("title"), request.POST.get("content")) return render(request, "my_app/page.html") def save_data(title, content): filename = f"files/{title}.md" if default_storage.exists(filename): default_storage.delete(filename) default_storage.save(filename, ContentFile(content))
HTML表单
<form method="post"> {% csrf_token %} <label for="title">Enter a title:</label><br> <input id="title" type="text" name="title"> <br><br><label for="textarea">Enter the information:</label><br> <textarea id="textarea" name="content"></textarea><br><br> <input type="submit" value="Save Page"> </form>
示例情况
输入内容:
# My file This is markdown file. This file was created as an example for my question.
保存后打开文件显示:
# My file This is markdown file. This file was created as an example for my question.
解决方案
执行print(repr(request.POST['content']))可定位问题本质,输出为# My file\r\n\r\nThis is markdown file.\r\nThis file was created as an example for my question.,问题根源是Windows与Linux/Mac OS的换行符编码差异:浏览器会将textarea中的换行转换为\r\n(Windows风格换行),在类Unix系统下打开文件时,\r会被识别为额外换行,导致出现多余空行。
解决方法是在保存前将\r\n替换为\n(类Unix风格换行),修改save_data函数:
def save_data(title, content): filename = f"files/{title}.md" # 替换Windows换行符为Unix换行符 content = content.replace('\r\n', '\n') if default_storage.exists(filename): default_storage.delete(filename) default_storage.save(filename, ContentFile(content))
内容的提问来源于stack exchange,提问作者user21893575
相关产品推荐
相关产品推荐

