【问题标题】:How to remove <br/> tag from Textarea?如何从 Textarea 中删除 <br/> 标签?
【发布时间】:2015-02-28 19:02:33
【问题描述】:

我正在使用 Django 构建一个简单的个人网站。我刚刚建立了一个基本的电子邮件表单。这是它的 models.py 文件:

from django.db import models

class Message(models.Model):
    name = models.CharField(max_length=200, unique=True)
    email = models.EmailField(unique=True)
    subject = models.CharField(max_length=100, unique=True)
    message = models.CharField(max_length=1000, unique=True)

    def __unicode__(self):
        return self.name

这里是对应的forms.py文件:

from django import forms
from rksite.models import Message

class EmailForm(forms.ModelForm):
    name = forms.CharField(max_length=200,help_text="Name:")
    email = forms.EmailField(help_text="Email:")
    subject = forms.CharField(max_length=100, help_text="Subject:")
    message = forms.CharField(max_length=1000, widget=forms.Textarea, help_text="Message:")

    class Meta:
        model = Message #link the model to the form

最后,我还将在下面包含表单的 html 页面:

{% extends 'rksite/base.html' %}

{% block title %}RaghavKumarContact{% endblock %}

{% block content %}
<h1>Contact Me</h1>
<br />
<form class="span6" id="email_form" method="POST" action="/home/contact/">
{% csrf_token %}
{% for field in form.visible_fields %}
        {{ field.errors }}
        {{ field.help_text }}
        {{ field|linebreaks }}
{% endfor %}
<br />
<button class="btn btn-primary" type="submit" name="send">Send</button>
</form>
{% endblock %}

现在,无论我做什么,“br/”标签都会显示在“消息”文本区域字段中。这是我在网页上看到的:

我怎样才能从这个 Textarea 中去掉这个标签?

编辑: 如果我没有应用linebreaksfilter,这就是它的样子:

换行过滤器的替代方法是什么??

【问题讨论】:

标签: html django tags


【解决方案1】:

不要在这里使用linebreaks

{{ field|linebreaks }}

渲染表单的小部件,然后通过linebreaks 过滤器传递整个渲染的 HTML 块。该过滤器将换行符转换为 &lt;br /&gt; 标签,Textarea 小部件的呈现在文本之前包含换行符:

def render(self, name, value, attrs=None):
    if value is None:
        value = ''
    final_attrs = self.build_attrs(attrs, name=name)
    return format_html('<textarea{}>\r\n{}</textarea>',
                       flatatt(final_attrs),
                       force_text(value))

(来自https://github.com/django/django/blob/master/django/forms/widgets.py#L435

我不确定您为什么要通过 linebreaks 传递字段值 - 如果您担心的话,HTML 文本区域应该可以很好地处理消息文本中的常规换行符。

【讨论】:

  • 如果我不使用换行符,整个表单会呈现在一行上,看起来很难看。我会给你发一张它的外观快照。
  • 让它工作我删除换行符,而是在该 for 循环中的每个字段后添加一个“br”标签。谢谢!
  • 是的,如果您逐个字段地进行,则需要某种分隔符 - 我通常将每个字段包装在

    元素中。

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多