首页 > 解决方案 > 在输入表单中保留换行符

问题描述

我意识到有很多类似的问题,但他们似乎都回答了反面:“我如何显示......”

我可以证明我没有从请求对象中获取换行符

环境

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导入了中间位置,但我已经删除了它 - 没有区别

标签: django

解决方案


推荐阅读