Django Auth在登录表单中添加占位符

时间:2019-01-11 19:11:26

标签: django django-forms

我正在按照本教程进行Django登录: https://wsvincent.com/django-user-authentication-tutorial-login-and-logout/

以下是使用django auth启用登录的代码:

urls.py:

from django.contrib import admin
from django.urls import path, include
from django.views.generic.base import TemplateView

urlpatterns = [
    path('admin/', admin.site.urls),
    path('customers/', include('django.contrib.auth.urls')),]

并创建了一个template / registration / login.html模板

我想在登录页面中添加占位符字符串以输入用户名和密码。

我尝试将AuthenticationForm子类化(建议在这里Django adding placeholders to django built in login forms),但是我不确定如何在urls.py中进行更改。我不想影响Django随附的其他形式,例如auth password_change等。

请注意,我正在使用Django 2.1.5和python 3.6

编辑:

我进行了以下更改,但没有任何影响:

在customers / forms.py中

from django import forms
from django.contrib.auth.forms import AuthenticationForm

class CustomAuthForm(AuthenticationForm):
    username = forms.CharField(widget=forms.TextInput(attrs={'class':'validate','placeholder': 'Your Username'}))
    password = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder':'Password'}))

在urls.py

from django.contrib.auth import views as auth_views
from customers.forms import CustomAuthForm

urlpatterns = [
    path('admin/', admin.site.urls),
    path('customers/login/', auth_views.LoginView.as_view(), kwargs = {"authentication_form":CustomAuthForm}),
    path('customers/', include('django.contrib.auth.urls')),]

我在登录表单文本区域中看不到“您的用户名”和“密码”字符串。

固定的修改

我更改了urls.py并成功了

 path('customers/login/', auth_views.LoginView.as_view(
template_name='registration/login.html', authentication_form=CustomAuthForm)),

2 个答案:

答案 0 :(得分:0)

在您的project/settings.py中,导航到TEMPLATES并将'DIRS'设置为[os.path.join(BASE_DIR, 'templates')]。这样,您告诉Django从此文件夹(如果有)而不是virtualenv加载其模板。

编辑:尝试将forms.TextInput更改为forms.widgets.TextInput,因为它是在 django.forms.widgets 中定义的类。对PasswordInput做同样的事情。

答案 1 :(得分:0)

class CustomAuthForm(AuthenticationForm):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.fields['username'].widget.attrs.update({
                 'placeholder':'your place holder'})
       # same for the placeholder of passsword.