【问题标题】:Keep HTML formatting when passing variable from Django template to view将变量从 Django 模板传递到视图时保持 HTML 格式
【发布时间】:2016-11-14 10:52:14
【问题描述】:

我在我的 Django 应用程序中创建了一个联系表单。

在我的模板中有一个 textarea 字段:

<textarea class="form-control" rows="8" id="email_body" name="email_body" placeholder="Email body"></textarea>

在我的views.py 中,此文本区域的内容被传递给发送电子邮件的函数:

def index(request):
    # some code here
    email_body = request.POST.get('email_body')
    send_emails(email_subject, email_body, email_list) # the other variables are declared above
    # more code here

不知道是否需要,但是send_emails函数的代码是:

def send_emails(email_subject, email_body, email_list):
    subject = email_subject
    message = email_body

    email = EmailMessage(subject, message, os.environ['EMAIL_HOST_USER'], email_list)
    email.content_subtype = "html"
    email.send()

问题是电子邮件正文没有文本格式。所有换行符(来自 textarea)都丢失了,消息打印在一行中。

当它被传递给视图和send_emails 函数时,有没有办法保持 textarea 消息的原始 HTML 格式?

【问题讨论】:

标签: python html django


【解决方案1】:

重点是文本区域包含任何“HTML 格式”。正如您所说,它包含换行符;但 HTML 会忽略这些。您需要将它们转换为 HTML 中断标记。

您可以为此使用linebreaks 模板过滤器;在模板之外,它可以通过django.utils.html.linebreaks 访问。

【讨论】:

  • Daniel,你知识渊博,但我认为你在这一点上是错误的。由文本区域保存在 DB 中的值包含适当的 HTML 格式标记,例如粗体、斜体和带有字体详细信息的下划线。需要使用安全模板标记,以便将该变量显示为在 textarea 中输入。我错了吗?
  • 如果 OP 使用某种 WYSIWYG 小部件,就会出现这种情况;但是问题中没有任何迹象。
【解决方案2】:

如果您使用Django's Form API 实例化您的表单/文本区域,您可以应用模板标签过滤器,例如 {{ textarea |换行符 }} 以获取您需要的 HTML 格式。

【讨论】:

    猜你喜欢
    • 2020-08-09
    • 2015-05-23
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 2013-11-27
    相关资源
    最近更新 更多