1

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

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

4

1 回答 1

2

我可以建议和替代方法来获得相同的东西吗?

试着放

attrs = {'placeholder':'your placeholder text here'}

像这样进入您的表单字段小部件:

formfield = SomeField(widget = SomeWidget(attrs = {'placeholder':'your placeholder text here'} ))

然后你可以打印出来

{{ field }} 

在模板中并完成它。

编辑:回应第一条评论。

由于我刚刚开始新项目并在页面顶部下载了带有漂亮时尚登录表单的 html5 样板文件,因此我必须完全按照我的建议进行操作。我是这样做的:

表格.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'),
)

奇迹般有效

于 2012-11-20T20:21:36.780 回答