Acabei de instalar o aplicativo de autenticação padrão do Django. Está funcionando e tudo, mas estou pensando em como poderia alterar o css do formulário.
Diga que eu tenho isso:
<form ...>
<input type = "text" class = "input-class" placeholder = "user">
<input type="submit" value="login" />
</form>
que mostraria uma forma bonita após a classe na entrada de texto.
E então, eu tenho o feio simples login.html modelo para autenticação do Django:
<form method="post" action="{% url "login" %}">
{% csrf_token %}
<div>
<td>{{ form.username.label_tag }}</td>
<td>{{ form.username }}</td>
</div>
O que eu quero fazer é obter o segundo formulário com as classes css do primeiro.
Existe uma maneira de fazer isso sem mexer com modelos e formulários? E, se não, alguém pode me mostrar o caminho?
Muito obrigado
Respostas:
1 para resposta № 1Eu gostaria que houvesse uma maneira direta de fazer isso, sem mexer em formulários ou instalar um aplicativo de terceiros. Mas, infelizmente, não é esse o caso.
Se você não deseja instalar nenhum aplicativo, pode estender o AuthenticationForm
:
class PrettyAuthenticationForm(AuthenticationForm):
class Meta:
widgets = {
"username": forms.TextInput(attrs={"class": "input-class"})
}
Então, se você estiver usando o LoginView
passe seu novo PrettyAuthenticationForm
usando o authentication_form
parâmetro (veja o link para mais detalhes).
Mas não sei se vale todo o trabalho. Já fiz isso algumas vezes, mas geralmente prefiro instalar django-widget-tweaks ou django-crispy-forms.
Se você precisar apenas adicionar alguma classe css aqui e ali, e estiver usando um conjunto de css personalizado, sugiro usar o django-widget-tweaks.
Se você tiver vários formulários e estiver usando alguma estrutura CSS como o Bootstrap ou o Foundation, eu recomendaria o uso django-crispy-forms.
Um exemplo com django-widget-tweaks, primeiro instale-o:
pip install django-widget-tweaks
Adicione-o ao seu settings.py
INSTALLED_APPS = [
# ...
"widget_tweaks",
]
No seu modelo, carregue-o em cima do arquivo:
{% load widget_tweaks %}
Em seguida, use-o em seus campos:
{{ form.username|add_class:"input-class" }}