使用Django正确标记多个表单字段

时间:2017-02-18 04:48:49

标签: python html django forms

我有一个简单的登录界面,其中包含用户名和密码输入,我想标记每个字段,以便用户点击“用户名”和“用户名”。或者&#39;密码&#39;它会自动将控件切换到字段。比如Facebook主页就好了。我的问题是我不知道应该如何正确使用<input标签:

<form action="/login/" method='post'>
    <label for='username_info'> Username </label>
    {% csrf_token %}
    {{ form.username }}
    <p>
    <label for="password_info"> Password </label>
    {{ form.password }}
    <p>
    <input id='username_info' type='submit'>
</form>

因此,这适用于Username文本,但不适用于Password文本。如何正确标记每个字段?我查看了Django Docs example但是当我尝试将django模板标记用作value标记的input属性时,它只显示字段中的原始html。

编辑:forms.py文件:

来自django导入表单 从模型导入LoginInfo

class LoginForms(forms.ModelForm):

    class Meta:
        model = LoginInfo
        fields = ('username', 'password')

3 个答案:

答案 0 :(得分:2)

Facebook并没有在登陆表单中使用标签,他们使用占位符。这就是你使用django形式的方法:

q = forms.CharField(label='username', 
                widget=forms.TextInput(attrs={'placeholder': 'Username'}))

有关详细信息,请查看widgets documentation

编辑:在评论中回答您的问题, forms.py 看起来会像这样:

class LoginForm(forms.Form):
    username = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Username'}))
    password = forms.CharField(widget=forms.PasswordInput)
  

这会影响我的模特吗?

不,即使你保存它也不会,因为它没有链接到任何模型。

答案 1 :(得分:1)

我不知道这里有什么问题。但您可以在 forms.py 中添加标签,如下所示:

username = forms.CharField(label='Username', max_length = 100)
password = forms.CharField(label='Password', max_length = 100)

希望这可以提供帮助。

答案 2 :(得分:1)

使用label_tag属性,该属性将自动输出标签的HTML。

<p>
{{ form.password.label_tag }}
{{ form.password }}
</p>