Django:如何在模板中访问表单字段input_type

时间:2012-11-20 19:09:04

标签: django-forms

我正在以这种方式呈现表单:

{% 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访问模板。

1 个答案:

答案 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'),
)

就像一个魅力