我想在表单中将django我的错误消息显示为占位符,而不是在表单输入框本身上方。这在Django中是可能的,还是我必须通过编写一些Javascript来实现这一点?
<div class="form-group">
{% if login_form.password.errors %}
{% for error in login_form.password.errors %}
<p>{{ error }}</p>
{% endfor %}
{% endif %}
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-key fa-fw"></i></span>
{{ login_form.password | placeholder:"password" | addClass:"form-control" }}
</div>
</div>
特定兴趣线。我想改变这个:
{{ login_form.password | placeholder:"password" | addClass:"form-control" }}
到此
{{ login_form.password | placeholder:{{ error }} | addClass:"form-control" }}
其中{{error}}是由表单
抛出的Django错误消息我认为必须有某种方法来获取模板变量的字符串值,但无法找到任何答案
编辑:我已经尝试了以下内容,但无济于事<div class="form-group">
{% if login_form.password.errors %}
{% for error in login_form.password.errors %}
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-key fa-fw"></i></span>
{{ login_form.password | placeholder:{{ error|escape }} | addClass:"form-control" }}
</div>
{% endfor %}
{% endif %}
</div>
我的自定义模板标签如下所示
@register.filter(name='placeholder')
def placeholder(value, token):
value.field.widget.attrs["placeholder"] = token
return value
Django抛出一个TemplateSyntax错误抱怨:
占位符需要2个参数,1提供
答案 0 :(得分:2)
首先,django模板系统中的嵌套表达式不正确,因此placeholder
的过滤器参数不应该用双括号括起来,而是直接写入:
{{ login_form.password | placeholder:error | addClass:"form-control" }}
此处,error
变量在外部花括号范围的上下文中正确计算。
其次,我建议确保过滤器参数的类型。如果您确实需要字符串值,则可以使用内置过滤器进行显式转换:
{% with err_msg=error|stringformat:"s" %}
{{ login_form.password | placeholder:err_msg | addClass:"form-control" }}
{% endwith %}
答案 1 :(得分:1)
这可以做到。
{{ login_form.password.errors }}
以下是https://docs.djangoproject.com/en/1.9/topics/forms/#rendering-form-error-messages
的相关文档这段代码应该重写为
{{ login_form.password | placeholder:"password" | addClass:"form-control" }}
{% if login_form.password.errors %}
<span class="error">{{ login_form.password.errors }}</span>
{% endif %}
或者也可以这样做
{{ login_form.password | placeholder:"password" | addClass:"form-control" }}
<input type="password" class="form-control" placeholder="
{% if login_form.password.errors %}
{{ login_form.password.errors }}
{% else %}
password
{% endif %}
">
答案 2 :(得分:1)
我还没有测试过,但这可能有用:
# forms.py
class MyForm(forms.Form):
class meta:
model = MyModel
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
error_messages = self.fields['myfield'].error_messages
self.fields['myfield'].widget.attrs.update({'placeholder': error_messages})