Примечание. Этот вопрос не следует смешивать с аналогичными вопросами прошлого, но до Django 1.11, когда они выпустили рендеринг форм на основе шаблонов.
Я понимаю, что в Django теперь есть рендеринг форм на основе шаблонов. Насколько я понимаю, это должно решить проблему внедрения классов CSS из представления или формы, а не сохранения всего HTML / CSS в шаблонах.
Это моя цель: чтобы мои формы и представления были сосредоточены на том, что отображается, а в моих шаблонах - на том, как это отображается. Поэтому я хочу сохранить в своих шаблонах весь HTML / CSS.
Итак, мои вопросы:
- Как мне добавить класс (например,
form-text
) ко всемTextInput
виджетам из системы шаблонов? - Как мне добавить класс (например,
alert-warning
) ко всем сообщениям об ошибках (сбоям проверки) из системы шаблонов?
Возможно, я что-то неправильно понял в этой новой функции, поэтому, если я понял, не стесняйтесь сообщить мне, если это работает не так, или я прошу невозможное. В идеале я хотел бы реализовать эти изменения рендеринга формы в главном шаблоне.
Пример проблемы
views.py
:
class SignUp(generic.edit.CreateView):
model = models.User
template_name = 'usermgmt/sign_up.html'
form_class = forms.UserCreateForm
success_url = '/sign_up_done/'
templates/master.html
(я хочу добавить сюда кое-что, что заставит все TextInput
виджеты получить класс):
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous">
<title>{% block title %}{% endblock %} | Website</title>
</head>
<body>
<div class="content-wrapper clearfix">
{% block main %}{% endblock %}
</div>
</body>
</html>
templates/usermgmt/sign_up.html
:
{% extends 'master.html' %}
{% block title %}Sign Up{% endblock %}
{% block main %}
<h1>Sign Up</h1>
<p>Enter your email to sign up!</p>
<form class="form-group" method="post">
{% csrf_token %}
<input type="hidden" name="next" value="{{ next }}">
{{ form.as_p }}
<button class="btn btn-primary" type="submit">Sign Up</button>
</form>
{% endblock %}