[英]Django pass template variable to custom templatetag
我想在表单内以占位符显示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>
我的自定义templatetag如下所示
@register.filter(name='placeholder')
def placeholder(value, token):
value.field.widget.attrs["placeholder"] = token
return value
Django抛出TemplateSyntax错误,抱怨:
占位符需要2个参数,提供1个
首先,django模板系统中的嵌套表达式不正确,因此不应将placeholder
的filter参数括在双括号中,而应直接写成:
{{ 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 %}
可以做到的。
{{ login_form.password.errors }}
这是该https://docs.djangoproject.com/zh-CN/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 %}
">
我尚未测试,但这可能有效:
# 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})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.