📅  最后修改于: 2023-12-03 14:52:16.699000             🧑  作者: Mango
在 Django 中,如果你在某一个表单中使用了 TextArea 控件,用户在输入多行文本时,文本中的换行符并不会被正确保存到数据库中。这是因为 Django 的默认行为是将换行符替换为 HTML 的 <br>
标签,这会导致保存到数据库中的文本出现多余的的 <br>
标签。
为了解决这个问题,你需要在表单中将提交的文本进行处理,将其中的换行符替换为数据库中支持的换行符。以下是一个示例:
class MyForm(forms.Form):
text_field = forms.CharField(widget=forms.Textarea)
from django.views.generic.edit import FormView
class MyFormView(FormView):
form_class = MyForm
template_name = 'my_template.html'
success_url = '/thanks/'
def form_valid(self, form):
# 处理文本中的换行符,将其转换为数据库支持的换行符
form.cleaned_data['text_field'] = form.cleaned_data['text_field'].replace('\r\n', '\n').replace('\r', '\n')
# 保存数据到数据库中
# ...
return super().form_valid(form)
在上面的代码中,我们使用了 replace
函数将换行符 \r\n
和 \r
替换为数据库支持的换行符 \n
,然后将处理后的文本赋值给表单的 cleaned_data
字典中的 text_field
键。
在这个示例中我们使用了 FormView
来处理表单的提交,当表单提交成功时,执行 form_valid
方法来处理保存发操作。你也可以使用其他的方法来处理表单的提交,比如 CBV 中的 CreateView
等。
除此之外,你还可以使用一些第三方库,比如 django-crispy-forms 来便捷地处理 Django 表单的各种问题。
希望这篇文章能够帮助到你在 Django 中正确地保存 TextArea 上的换行符。