Модификация django simple captcha
Я использую django-simple-captcha и crispy form
Вот мой код:
forms.py
from django import forms
from captcha.fields import CaptchaField
class ContactEntryForm(forms.Form):
name = forms.CharField(
label="",
widget=forms.TextInput(attrs={'placeholder': 'Full Name'})
)
email = forms.CharField(
label="",
widget=forms.TextInput(attrs={'placeholder': 'Email', 'type': 'email'})
)
subject = forms.CharField(
label="",
widget=forms.TextInput(attrs={'placeholder': 'Subject'})
)
message = forms.CharField(
label="",
widget=forms.Textarea(attrs={'placeholder': 'Message', 'rows': 5})
)
captcha = CaptchaField()
page.html
<form method="POST">
{% csrf_token %} {{ contact_entry_form|crispy }}
<input type="submit" value="Submit" class="btn btn-dark" style="width: 100%" />
</form>
Но поля изображения и текста в разделе captcha слишком узкие. Я хочу добавить немного поля между изображением и текстовым полем. Могу ли я сделать некоторое HTML-форматирование в forms.py? Например:
captcha = CaptchaField(attrs={'style': 'margin:10px'})
Или есть лучшее решение для добавления полей из forms.py?
Вы можете добавить attrs к полю формы в forms.py
, но у меня это не сработало, когда кто-то вводил неправильные значения. Красные алерт/див не появлялись. Где-то по ходу дела существующий атрибут class переопределяется.
Вот что я в итоге сделал:
## forms.py
from django import forms
from captcha.fields import CaptchaField
class ContactForm(forms.Form):
full_name = forms.CharField(label="Name",required=True)
from_email = forms.EmailField(label="Email", required=True)
subject = forms.CharField(required=True)
message = forms.CharField(widget=forms.Textarea, required=True)
captcha = CaptchaField(label='Please enter the characters in the image')
И затем в вашем css:
#id_captcha_1 {
max-width: 100px;
margin-top: 8px;
}
max-width
потому что это выглядит глупо для текстового ввода такой ширины и margin-top
чтобы изображение не врезалось в верхнюю часть текстового ввода.