django - 在输入表单中保留换行符
问题描述
我意识到有很多类似的问题,但他们似乎都回答了反面:“我如何显示......”
我可以证明我没有从请求对象中获取换行符
环境
django 2.2.1,quunicorn 19.9.0
.. 在基于 python 3.7 基础镜像的 docker 镜像中运行
设置
预填充数据库记录:
update api_entitlement set notes= E'line 1\nline2\nline3' where guid='44aa651c-ea98-4990-aa85-d87d21db6043';
....并确认数据在那里:
select * from api_entitlement where guid='44aa651c-ea98-4990-aa85-d87d21db6043';
id | guid | notes
-------+--------------------------------------+--------
14053 | 44aa651c-ea98-4990-aa85-d87d21db6043 | line 1+
| | line2 +
| | line3
(1 row)
因此,创建的模板片段textarea
是:
<pre id="{{ entitlement.guid }}_notes">{% if entitlement.notes == '—' or
entitlement.notes is None %}—{% else %}{{ entitlement.notes }}
{% endif %}</pre><textarea id="{{ entitlement.guid }}_notes_new"
type="text" class="form-control" value="{% if entitlement.notes == '—' %}
-{% else %}{{ entitlement.notes }}{% endif %}" style="display:none">{{
entitlement.notes }}</textarea>
(有一些 javascript 可以从display切换到edit,从 the切换<pre>
到 the <textarea>
)
因此,读取表单的代码是:
def get(self, request, *args, **kwargs):
logger.info(f"notes value is {request.GET}")
#
# snip irrelevant code
#
value = request.GET.get('notes')
logger.info(f"notes value is {value}")
if value != '-' and entitlement.notes != value:
entitlement.notes = value
#
# ... and even more
正在使用
如果我简单地显示页面,我会从数据库中获取 3 行,作为三个单独的行 - 这很好。
如果我切换到编辑模式,我会得到一个 3 行输入表单,上面有 3 行。我将编辑数据,使第 2 行和第 3 行的数字前有空格,然后提交表格
行logger.info
日志notes value is <QueryDict: {'notes': ['line 1line 2line 3']}>
....换行符已被删除。
为什么?
.... 而且,更重要的是,我如何留住他们?
我确实whitenoise.middleware.WhiteNoiseMiddleware
导入了中间位置,但我已经删除了它 - 没有区别
解决方案
推荐阅读
- rust - 如何通过宏获取已声明的变量名和变量类型
- java - 为什么Spring Data MongoDB不提供Aggregate操作的“hint”选项,mongodb Driver有,但我不知道怎么用
- regex - 提取方括号中的文本(括号内的属性之间有分隔符)
- javascript - 重新创建 Google 图片布局
- c# - 无法将 System.Datetime 转换为字符串错误
- typescript - Angular 7 绑定指令
- python - ValueError:时间数据 '12/31/2017' 与格式 '%d-%m-%Y' 不匹配
- python - 如何在 matplotlib 中设置条形图的大小
- excel - 在特定路径中保存新书的 VBA 错误
- node.js - 如何通过 Mongoose 为 Mongo 连接创建内存存储引擎?