我在使用 Django 時遇到了一些麻煩。所以,我想使用 Bootstrap 的登錄模板并在我的專案中使用它。所以,我已經能夠正確地做到這一點,除了用戶名和密碼欄位,{{form.username}}即使我使用了表單控制類,它們也顯示為常規。我來給你展示:
表格.py
from django import forms
from django.forms import TextInput, PasswordInput
class LogINFO(forms.Form):
username= forms.CharField(label= 'Usuario: ', max_length=20, widget=forms.TextInput(attrs={"placeholder": "Username", 'style': 'width: 300px;', "class": "form-control"}))
password=forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Password', 'style': 'width: 300px;', 'class': 'form-control'}))
和我的login.html
{% csrf_token %}
<div class="form-floating">
{{form.username}}
</div>
<div class="form-floating">
{{form.password}}
</div>
好吧,它顯然省略了所有內容,它只是顯示為常規表單輸入。我沒有使用模型,因為我使用的是身份驗證應用程式。
uj5u.com熱心網友回復:
除非以特定方式設定,否則登錄等身份驗證表單傾向于覆寫自定義。
嘗試以下
網址.py
from django.contrib.auth import views
from .forms import LogINFO
....
path('login/',
views.LoginView.as_view(
template_name="registration/login.html", #this is default, change as needed
authentication_form=LogINFO,
),
name='login'
),
視圖.py
from django.contrib.auth.forms import AuthenticationForm,
class LogINFO(AuthenticationForm):
username= forms.CharField(label= 'Usuario: ', max_length=20, widget=forms.TextInput(attrs={"placeholder": "Username", 'style': 'width: 300px;', "class": "form-control"}))
password=forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Password', 'style': 'width: 300px;', 'class': 'form-control'}))
def __init__(self, *args, **kwargs):
super(LogINFO, self).__init__(*args, **kwargs)
關鍵要素是:
- 使您的表單成為 AuthenticationForm 類的子類(這在您使用 Django 的身份驗證時很有意義)
- 呼叫 super init 函式(它允許子類使用該類的所有方法)
- 并在 URLs.py 檔案中提供 authentication_form 的類
最后一點,當我覆寫另一個應用程式(如 django.config.auth)的模板時,我將有問題的應用程式放在settings.py INSTALLED_APPS之前,以便它首先找到我的新模板。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/488710.html
上一篇:OnGetAsync捕獲我的按鈕的v1,但不通過彈出視窗捕獲v2
下一篇:wireshark網路抓包詳解
