【问题标题】:Customizing Django User-Authentication forms自定义 Django 用户身份验证表单
【发布时间】:2011-10-09 19:10:13
【问题描述】:

我是 Django 新手。我正在构建一个使用 django-authentication 模块的 django 项目。

所以我使用 LoginForm 生成上下文变量 {{form.username}} 和 {{form.password}} 供任何用户登录。但是为了让用户体验更好,我有一些类似

    <td><input type="text" name="username"  id="" size="30" value="" class='loginput'/></td>

而不是简单的

    <td>{{ form.username }}</td>

我如何使用输入标签但仍然使用 django-authentication 后端表单?我也明白,对于任何其他形式,我可能会使用小部件,form-media。我无法解决这个问题。

谢谢。

【问题讨论】:

    标签: django forms


    【解决方案1】:

    为什么这会增强可用性?唯一的区别是您添加了class,并且出于某种原因删除了 id 属性,因此无法使用label。我看不出在什么情况下让一些不太容易访问的东西会使用户体验更好。同样,删除 Django 表单在验证失败时重新显示错误值的动态能力似乎几乎没有进步。

    不过,我无法真正理解您的问题在问什么。如果你真的想在你的模板中使用这个不太可用的标记,为什么不直接做呢?在任何情况下,您都必须为 contrib.auth 视图提供模板,所以这是您的机会。

    当然,更好的方法是简单地将 LoginForm 子类化并在那里添加您的 HTML 类:

    class LoginForm(auth.forms.AuthenticationForm):
        username = forms.CharField(label=_("Username"), max_length=30, 
                                   widget=forms.TextInput(attrs={'class': 'loginput'}))
    

    并在额外的上下文中将此表单传递给登录 url:

    (r'^accounts/login/$', 'django.contrib.auth.views.login',
          {'template_name': 'myapp/login.html', 'authentication_form': LoginForm}),
    

    【讨论】:

      猜你喜欢
      • 2016-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-07
      相关资源
      最近更新 更多