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'))