как добавить тег <div> вместо <li>

forms.py

class TypeSelectionForm(forms.Form): checkbox_field = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple(), label="", required=False) def __init__(self, type_id, *args, **kwargs): super(TypeSelectionForm, self).__init__(*args, **kwargs) _type_checkbox = self.fields['checkbox_field'] MY_CHOICES=((type.id, type.title) for type in type) _type_checkbox.choices = MY_CHOICES initial_val = [] type_selection = Types.objects.filter(parent_type_id=type_id,is_active=True) for type_selection in type_selection: initial_val.append(type_selection.id) _type_checkbox.initial = initial_val 

views.py

 def types(method): """""""""""" types = TypeSelectionForm(type_id) return render(request,'types.html',{'types':types}) 

В шаблоне я делаю это поле таким,

types.html

  {% for field in types.checkbox_field %} <div class="deletelist"> {{field}}<br /> </div> {% endfor %} 

Он создает html, как это,

 <ul> <li><label for="id_checkbox_field_0"><input checked="checked" type="checkbox" name="checkbox_field" value="597" id="id_checkbox_field_0" /> comp lab</label></li> <li><label for="id_checkbox_field_1"><input checked="checked" type="checkbox" name="checkbox_field" value="598" id="id_checkbox_field_1" /> phy lab</label></li> <li><label for="id_checkbox_field_2"><input checked="checked" type="checkbox" name="checkbox_field" value="599" id="id_checkbox_field_2" /> chem lab</label></li> </ul> 

Я хочу заменить <ul> и <li> <div class="class-name">

Нужна помощь.

4 Solutions collect form web for “как добавить тег <div> вместо <li>”

Почему бы не использовать силу шаблонов шаблонов Django?

 from django import template from django.utils.safestring import mark_safe register = template.Library() @register.filter("as_div") def as_div(form): form_as_div = form.as_ul().replace("<ul", "<div").replace("</ul", "</div") form_as_div = form_as_div.replace("<li", "<div").replace("</li", "</div") return mark_safe(form_as_div) 

Поместите это в тег шаблона, а затем сделайте это просто в своем шаблоне

 {% load ad_div %} {# some Code #} {{ form|as_div }} {# some other code #} 

============================

Другой подход (лучший очиститель)

Другим подходом было бы расширение модели форм джанго

следующим образом

 from django.forms.forms import BaseForm Class AsDiv(BaseForm): def as_div(self): return self._html_output( normal_row = u'<div%(html_class_attr)s>%(errors)s%(label)s %(field)s%(help_text)s</div>', error_row = u'<div>%s</div>', row_ender = '</div>', help_text_html = u' <span class="helptext">%s</span>', errors_on_separate_row = False) 

Тогда вы можете просто сделать это – ваш шаблон

 {{ form.as_div }} 

Из документации :

Новое в Django 1.4.

Для более детального контроля над сгенерированной разметкой вы можете перебирать переключатели в шаблоне. Предполагая форму myform с полем, который использует RadioSelect качестве своего виджета:

 {% for radio in myform.beatles %} <div class="myradio"> {{ radio }} </div> {% endfor %} 

В вашем шаблоне вы должны иметь следующее:

 {% for radio in types.checkbox_field %} <input style="margin: 8px -3px;float: left;" type="button" class="delete_types" id="delete_name"/>{{ radio }} {% endfor %} 

Вы также должны использовать ModelMultipleChoiceField :

 class TypeSelectionForm(forms.Form): checkbox_field = forms.ModelMultipleChoiceField(label="", queryset=Types.objects.none(), required=False) def __init__(self, *args, **kwargs): qs = kwargs.pop('queryset') super(TypeSelectionForm, self).__init__(*args, **kwargs) self.fields['checkbox_field'].queryset = qs 

Инициируйте его так:

 def types(method): """""""""""" qs = Types.objects.filter(parent_type_id=type_id,is_active=True) types = TypeSelectionForm(queryset=qs) return render(request,'types.html',{'types':'types'}) 

Виджеты принимают атрибут attrs, который должен добавлять атрибут к каждому входу. Попробуй это:

 checkbox_field = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple(attrs={'class': 'my-image-class', }), label="", required=False) 

ОБНОВИТЬ:

Таким образом, похоже, что упомянутый выше гранулярный подход работает только для виджетов переключателей. Но то, что вы хотите, на самом деле очень просто. Просто выведите свои флажки как обычно:

 {% for field in types.checkbox_field %} {{field}} {% endfor %} 

Это выведет ваш список флажков по мере необходимости. Затем просто используйте небольшой CSS для создания фонового изображения каждого элемента списка:

 form ul li { background:url("<my-image>") no-repeat center; width:20px; height:20px; 

}

ОБНОВИТЬ

Если вы хотите по-разному отображать флажки, вам нужен собственный класс виджетов, так как это задание виджетов. Что-то вроде этого заставит вас идти. Я лично использовал параметр attrs для виджета, чтобы добавить его в класс, но я жестко закодировал его здесь, чтобы показать вам, что то, что вы просите, возможно, просто не красиво:

 class CheckboxDivSelectMultiple(CheckboxSelectMultiple): '''renders the checkboxes as divs with a hard coded class''' def render(self, name, value, attrs=None, choices=()): if value is None: value = [] has_id = attrs and 'id' in attrs final_attrs = self.build_attrs(attrs, name=name) output = [u'<div>'] # Normalize to strings str_values = set([force_unicode(v) for v in value]) for i, (option_value, option_label) in enumerate(chain(self.choices, choices)): # If an ID attribute was given, add a numeric index as a suffix, # so that the checkboxes don't all have the same ID attribute. if has_id: final_attrs = dict(final_attrs, id='%s_%s' % (attrs['id'], i)) label_for = u' for="%s"' % final_attrs['id'] else: label_for = '' cb = CheckboxInput(final_attrs, check_test=lambda value: value in str_values) option_value = force_unicode(option_value) rendered_cb = cb.render(name, option_value) option_label = conditional_escape(force_unicode(option_label)) output.append(u'<div class="%s"><label%s>%s %s</label></div>' % ('new-class', label_for, rendered_cb, option_label)) output.append(u'</div>') return mark_safe(u'\n'.join(output)) 

используйте его в своей форме:

 checkbox_field = forms.MultipleChoiceField(widget=forms.CheckboxDivSelectMultiple(), label="", required=False) 

Это похоже на решение @bhappy. Общее решение состоит в том, чтобы определить собственный метод as_div и использовать его в качестве фильтра шаблонов в ваших шаблонах. Посмотрите на эту статью django snippets post: Custom Form Example: Forms для Bootstrap Html – CSS Toolkit

  • Запрос доступа в пользовательских тегах шаблона django
  • Как выводить абзац с разрывами строк в django и mysql?
  • python добавляет новый div каждые 3-й итерации
  • система шаблонов django, вызывающая функцию внутри модели
  • Путь чтения в шаблонах
  • Как получить доступ к профилю пользователя в шаблоне Django?
  • Django, создавая пользовательскую страницу ошибок 500/404
  • Как отобразить упорядоченный словарь в шаблонах django?
  •  
    Interesting Posts for Van-Lav

    Развертывание Django на сервере OS 10.9

    Я, кажется, получаю сообщение об ошибке, хотя скрипт работает, я не понимаю, почему

    Насколько сложно создать почтовый клиент? – Python

    Извлечение текста из файла HTML с помощью Python

    Эйлер проекта в python (# 53)

    Как использовать хранилище данных с высокой репликацией

    Как сделать сервер доступным для локальных клиентов

    Надежно зашифруйте целые числа (до 2 ^ 48) в кратчайшую возможную строку, защищенную URL-адресами

    python подсчет букв в строке без функции count

    Как остановить Tkinter Frame от сжатия до его содержимого?

    объединить два кадра данных без повторов pandas

    RemovedInDjango19Warning: модель не объявляет явную строку app_label

    Как преобразовать файл gettext .mo в файл .po

    несогласованный отступ с Python после раскола

    Как извлечь JAR в файловой системе UNIX с помощью одной команды и указать ее целевой каталог с помощью команды JAR?

    Python - лучший язык программирования в мире.