【问题标题】:newline in models.TextField() not rendered in templatemodels.TextField() 中的换行符未在模板中呈现
【发布时间】:2012-05-03 11:52:32
【问题描述】:

我有一个带有属性的模型,

desc = models.TextField()

我使用 Django 提供的管理界面输入数据,然后查看了我的模板,其中获取并显示了数据库值。

在我的管理界面中,我留下了换行符(只是在我的段落之间留下空白行),但它们在我的模板中显示为单个段落。

我正在使用 Django 1.3 和 MySQL。

【问题讨论】:

    标签: django newline


    【解决方案1】:

    linebreaks

    用适当的 HTML 替换纯文本中的换行符;单个换行符成为 HTML 换行符 (<br />),新行后跟一个空行成为段落换行符 (</p>)。

    例如:

    {{ value|linebreaks }}

    【讨论】:

    • 这适用于渲染,但如果您想为 javascript、输入值或电子邮件保留 \n 怎么办?
    • 嗨,我也在找同样的东西,我有一个带有文本字段的模型和相应的管理类,我不知道把这个放在哪里???我们是否需要覆盖 html 并为其创建模板???
    • @Mike 忘了把嘴伸进这个stackoverflow.com/a/1894945
    • 如此简单的解决方案!也适用于 DetailView。
    【解决方案2】:

    请注意,我遇到了类似的问题,换行符没有显示,我意识到当 TextField 被声明为只读时,文本会被 HTML 段落标签包裹:

    <p> text </p>
    

    相对于前置标签:

    <pre> text </pre>
    

    Pre 标记保留新的行空间,因此如果您不将该字段设为只读,您将看到这些行空间。

    【讨论】:

      【解决方案3】:

      约翰,看起来你从伊格纳西奥那里得到了很好的回答。我只是想指出我为那些可能感到困惑的人(就像我一样)使用伊格纳西奥的答案所采取的步骤。在我显示文本字段的模板中,我在模板字段名称后面添加了“|linebreaks”(在我的例子中是“job.desc”):

      <ul>
          {% for job in varDataObject %}
          <li>
              <h4>
                  <a href="#" onclick='funPath("Job", {{ job.id }})'>{{ job.title }} </a>
              </h4>
              Description: {{ job.desc|linebreaks }}
      

      【讨论】:

      • 这个答案可能是对伊格纳西奥的回答的评论
      • 感谢 caulitomaz!我该如何修复这种情况?
      【解决方案4】:

      使用 sql 在模型的 TextField() 中使用换行符(不是 \n)保存文本:

      update event
      set description='xyz
                      asdasd
                       oaisjd '
      where id=1;
      

      在 Django 模板中:

      {{ object.description|linebreaks }}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-27
        • 1970-01-01
        • 2020-06-15
        • 2021-04-06
        • 2014-05-07
        • 1970-01-01
        • 2020-02-05
        • 2020-07-13
        相关资源
        最近更新 更多