Есть три способа, которые я могу придумать с верхней части головы.
Если вы хотите полностью контролировать форму HTML, в шаблоне Django или HTML-форме, просто сопоставьте имена своих полей, чтобы они соответствовали именам полей в форме Django. Таким образом, когда POSTed возвращается к вашему представлению, Django автоматически свяжет поля POSTed с полями формы Django.
Например, если у вас есть поле username
в форме Django (или модели Django при использовании ModelForm), вы могли бы иметь элемент <input type="text" name="username" maxlength="40">
(который вы можете стиль так, как вам нужно) на вашу HTML-форме, Django будет счастливо разберитесь в поле формы Django, предположив, что ваш взгляд правильно установлен. There is an example of this method in the Django documentation.
Другой способ - настроить виджеты полей формы Django в определении формы Django. The Django documentation talks a little bit about how to do this. Это отлично подходит для одного выхода, но, вероятно, это не лучший подход, если вы ожидаете повторного использования виджетов.
Окончательный подход заключается в подклассе виджета полей формы Django для автоматического предоставления любых необходимых вам атрибутов. Например, мы используем Bootstrap и подклассифицируем почти все виджеты, которые мы используем, чтобы использовать классы Bootstrap.
class BootstrapTextInput(forms.TextInput):
def __init__(self, attrs=None):
final_attrs = {'class': 'form-control'}
if attrs is not None:
final_attrs.update(attrs)
super().__init__(attrs=final_attrs)
Тогда это просто вопрос, чтобы форма Django знала, какой виджет будет использоваться для вашего поля формы.
class UsernameForm(forms.ModelForm):
class Meta:
model = auth.get_user_model()
fields = ['username']
widgets = {'username': BootstrapTextInput()}
Надеюсь, это поможет. Ура!
Потому что я не могу добавить более двух ссылок: вот что выглядит форма django: http://i.imgur.com/woXXhKu.png – arlyon
Где находится код, который у вас есть? – obayhan