2016-04-28 3 views
0

Я использую materializecss, чтобы дать сайту django некоторые материальные элементы. Я собрал форму («старый» способ с использованием html), но теперь понял, что мне нужно использовать форму django. Проблема в том, что эти формы не очень хорошо работают с материализуемыми встроенными системами столбцов (они используют классы для определения строк и интервалов столбцов). Here - пример макета, который я установил до сих пор. Однако при определении формы через form.py он выплескивает один вход для каждого слоя.Задание конкретного формата формы в Django

Мой вопрос: что я могу сделать для a) получить django для работы с html-определенной формой или b) создать «шаблон формы», чтобы дать полям ввода соответствующие классы?

Если вы хотите увидеть код, который я могу опубликовать, но я совсем новый кодер, поэтому он грязный.

Спасибо!

+0

Потому что я не могу добавить более двух ссылок: вот что выглядит форма django: http://i.imgur.com/woXXhKu.png – arlyon

+0

Где находится код, который у вас есть? – obayhan

ответ

0

Есть три способа, которые я могу придумать с верхней части головы.

Если вы хотите полностью контролировать форму 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()} 

Надеюсь, это поможет. Ура!

+0

Спасибо Caffeine, похоже, что решение подойдет лучше всего, но я попробую их ради ради гибкости. – arlyon

Смежные вопросы