我正在以这种方式呈现表单:
{% for field in form %}
<div>
{{ field.errors }}
<input name="{{field.name}}" type="{{field.widget.input_type}}" placeholder="{{field.name}}">
</div>
{% endfor %}
但是,{{field.widget.input_type}}
在这里返回空字符串,尽管从shell中尝试它会产生input_type
。那么如何从模板中访问字段的输入类型?
我没有使用{{field}}
,因为我需要在每个输入字段中放置一个占位符。
编辑:
我刚刚使用{{field}}
和一个简单的javascript,它将每个输入元素字段中的占位符与元素名称相同,但我仍然想知道如何从widget.input_type
访问模板。
答案 0 :(得分:2)
我可以建议和替代方法来获得相同的东西吗?
尝试放
attrs = {'placeholder':'your placeholder text here'}
进入您的表单字段小部件,如下所示:
formfield = SomeField(widget = SomeWidget(attrs = {'placeholder':'your placeholder text here'} ))
然后你可以打印出来
{{ field }}
在模板中并完成它。
编辑:回复第一条评论。
由于我刚开始新项目并在页面顶部下载了带有漂亮时尚登录表格的html5样板,我不得不完全按照我的建议去做。我这样做了:
forms.py:
from django.contrib.auth.forms import AuthenticationForm
class MyAuthenticationForm(AuthenticationForm):
def __init__(self, *args, **kwargs):
super(MyAuthenticationForm, self).__init__(*args, **kwargs)
self.fields['username'].widget.attrs['placeholder'] = self.fields['username'].label
self.fields['password'].widget.attrs['placeholder'] = self.fields['password'].label
现在也许您的问题是您还希望使用django.contrib.auth.views.login来记录用户,并且该视图使用django默认身份验证表单。不是问题!
打开你的urls.py并运用这个魔法:
from yourapp.forms import MyAuthenticationForm
from django.contrib.auth.views import login
urlpatterns = patterns('',
url(r'^login/$',
login,
{'template_name': 'yourapp/login.html', 'authentication_form':MyAuthenticationForm},
name='auth_login'),
)
就像一个魅力