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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 03:30:05