【问题标题】:Properly labeling multiple form fields with Django使用 Django 正确标记多个表单字段
【发布时间】:2017-02-18 04:48:49
【问题描述】:

我有一个带有用户名和密码输入的简单登录屏幕,我想标记每个字段,以便如果用户单击“用户名”或“密码”,它会自动将控件切换到该字段。就像 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 导入表单 从模型导入登录信息

class LoginForms(forms.ModelForm):

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

【问题讨论】:

    标签: python html django forms


    【解决方案1】:

    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)
    

    这会影响我的模型吗?

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

    【讨论】:

    • 谢谢你,我只是有一个问题。我正在阅读文档,我将如何将其实现到我的 forms.py 文件中?这会影响我的模型吗?
    • 好的,谢谢,现在我正在使用链接到我的模型的Meta 类,这就是我问这个问题的原因。我目前正在根据文档中所说的模型创建表单:docs.djangoproject.com/en/1.10/topics/forms/modelforms
    • 所以我不确定如果表单是由模型制作的,我应该如何更改 forms.py 文件
    • 在文档中找到一些关于它的信息docs.djangoproject.com/en/1.10/topics/forms/modelforms/…
    • @Amon,您可以使用简单的表单,而不是模型表单,因为在登录功能中您不必验证任何内容,您可以在注册时进行验证。 See these docs。您需要做的就是获取用户名和密码,无论它们是什么,并将它们传递给 authenticate 函数。
    【解决方案2】:

    我不知道这里有什么问题。但是您可以像这样在 forms.py 中添加标签:

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

    希望这会有所帮助。

    【讨论】:

    • 嘿,问题是我想正确地使用
    【解决方案3】:

    使用label_tag属性,它会自动输出标签的HTML。

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

    【讨论】:

      猜你喜欢
      • 2020-07-09
      • 2012-12-04
      • 2014-03-12
      • 2010-11-30
      • 2021-10-26
      • 1970-01-01
      • 1970-01-01
      • 2017-04-11
      • 2020-03-02
      相关资源
      最近更新 更多