Могу ли я получить HTML-элемент в форме django?

#django #django-models #django-forms #django-templates #django-views

#django #django-модели #django-forms #django-шаблоны #django-представления

Вопрос:

У меня есть ModelForm, MyForm. Помогите мне написать метод, который возвращает html-элементы для каждого поля, присутствующего в форме.

 class MyForm(forms.ModelForm):
    priority = forms.ChoiceField(
        widget=forms.Select(attrs={'class': 'form-control','data-role':'select'}),
        choices=((1,1), (2,2), (3,3), (4,4)),
        required=True,
        initial='3',
        label=_('Priority'),
        help_text=_("Please select a priority carefully. If unsure, leave it as '3'."),
    )

    due_date = forms.DateTimeField(
        widget=forms.TextInput(attrs={'class': 'form-control','data-role':'datepicker'}),
        required=False,
    )

    def getFormHtml(self):
        #need to return a dictionary with the key being the form field name and value being the HTML tag for the respective element 
  

Комментарии:

1. Вы читали официальные документы ? Это стандартная функциональность Django Form .

Ответ №1:

 my_form = MyForm()
  

в django есть встроенный способ отображения формы. Вы также можете получить отображение формы по умолчанию в виде, подобном этому:

 my_form.as_p()
  

или

 myform_as_table()
  

таким образом, вы могли бы расширить свой объект MyForm, чтобы иметь метод, который возвращает форму в виде html из данного экземпляра формы:

 class MyForm(forms.ModelForm):
    priority = forms.ChoiceField(
        widget=forms.Select(attrs={'class': 'form-control','data-role':'select'}),
        choices=((1,1), (2,2), (3,3), (4,4)),
        required=True,
        initial='3',
        label=_('Priority'),
        help_text=_("Please select a priority carefully. If unsure, leave it as '3'."),
    )

    due_date = forms.DateTimeField(
        widget=forms.TextInput(attrs={'class': 'form-control','data-role':'datepicker'}),
        required=False,
    )
    def getFormHtml(self):
        return self.as_table()
  

конечно, это имело бы смысл, только если вам нужен html формы в другом представлении. Если вам нужен html формы в шаблоне, вы можете получить форму в шаблоне, добавив ее {{my_form.as_table}} в шаблон или отрисовав поля формы вручную в шаблоне

Комментарии:

1. Спасибо! Я ожидаю словарь, ключом которого является имя поля формы, а значением — HTML-тег для соответствующего элемента. Возможно ли это?

2. вам нужны эти значения в представлении или шаблоне?

Ответ №2:

После отправки вы получаете значения полей, используя атрибут ‘name’ элемента. Вы могли бы получить метод form (post / get), но html-тег не попадет в представление.