当我尝试使用自定义 forms.py 文件中的 Bootstrap 设置 Django 默认登录模板的样式时,它不起作用。没有错误,但我仍然看到默认的无样式登录表单。
换句话说,LoginView 似乎根本没有使用 AuthenticationForm。
登录.html
<body>
<h2>Login</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Login</button>
</form>
</body>
</html>
表单.py
from django import forms
from django.contrib.auth.forms import AuthenticationForm
class LoginForm(AuthenticationForm):
username = forms.CharField(widget=forms.TextInput(
attrs={'class':'form-control'}))
password = forms.CharField(widget=forms.PasswordInput(
attrs={'class':'form-control'}))
url.py
from django.contrib import admin
from django.urls import include
from django.urls import path
from django.contrib.auth.views import LoginView
from django.contrib.auth import views
from myProject.forms import LoginForm
urlpatterns = [
path("admin/", admin.site.urls),
path('accounts/login/', LoginView.as_view(),{'template_name':'registration/login.html','authentication_form':LoginForm}),
path('login/', LoginView.as_view(template_name='registration/login.html'),{'authentication_form':LoginForm})
我已经尝试了几件事,包括对上面的“accounts/login/”和“login/”路径使用不同的语法,因为我认为这可能是我的问题,但它没有任何区别。
我在 Docker 中运行它,所以每当我做出更改时,我都会:
Docker compose down
Docker compose up
服务器重新启动后我就会看到更改。
感谢期待。
最佳答案
尝试按如下方式重写您的代码:
forms.py
class LoginForm(AuthenticationForm):
username = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control'}))
password = forms.CharField(widget=forms.PasswordInput(attrs={'class':'form-control'}))
def __init__(self, *args, **kwargs):
super(LoginForm, self).__init__(*args, **kwargs)
urls.py ...
path('accounts/login/', LoginView.as_view('template_name':'registration/login.html','form_class':LoginForm}),
path('login/', LoginView.as_view('template_name':'registration/login.html','form_class':LoginForm}),
其余部分似乎都很好。
关于python - 无法使用 Bootstrap 设置 Django 默认登录表单的样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56175113/