Django使用markdown时textarea的换行符在保存时会加倍的解决方案

我在用Django写一个简单wiki时遇到了这个问题:

1 def savePage(request):
2     if request.method == "POST":
3         # Take in the data the user submitted and save it as form
4         form = request.POST
5         title = form.get('title')
6         if title not in list_entries():
7             content = form.get('content')
8             util.save_entry(title, content)
9             return HttpResponseRedirect("wiki/" + title)

其中的save_entry函数为:

from django.core.files.base import ContentFile
from django.core.files.storage import default_storage
def save_entry(title, content):
    """
    Saves an encyclopedia entry, given its title and Markdown
    content. If an existing entry with the same title already exists,
    it is replaced.
    """
    filename = f"entries/{title}.md"
    if default_storage.exists(filename):
        default_storage.delete(filename)
    default_storage.save(filename, ContentFile(content))

 

出错的主要原因是:

django的default_storage.save()默认不支持从request.POST中textarea获取的数据格式。

保存时,在Windows系统下,它试图将Windows格式的数据再次转换成Windows,所以需要调用bytes()将从request中获取的conten转换成字节对象,再进行保存即可。

8 util.save_entry(title, bytes(content, 'utf8'))
posted @ 2021-03-29 09:05  chengbao_0  阅读(119)  评论(0编辑  收藏  举报