templatetags.py
from django import template
from django.utils.safestring import mark_safe
register = template.Library()
@register.filter("as_span")
def as_span(ZergitForm):
ZergitForm_as_span = ZergitForm.as_ul().replace("<ul", "<span").replace("</ul", "</span")
ZergitForm_as_span = ZergitForm_as_span.replace("<li", "<span").replace("</li", "</span")
return mark_safe(ZergitForm_as_span)
我正在使用MultipleChoiceField。使用此模板标签后,它将以跨度而不是<li>
标签打印表单数据。我想对span中的每个数据执行删除操作。现在它正在打印每个{单个<li>
标记中的{1}}值。我需要为每个范围插入一个输入按钮。
是否可以使用templatetag概念。
由于
答案 0 :(得分:0)
渲染字段而不是整个表单时,您可以执行类似的操作。
如果你构建一个模板标签来渲染一个字段,你可以使用它的id,你需要通过ajax调用来删除它。
答案 1 :(得分:0)
最好更换这些字段的小部件。您好像使用CheckboxSelectMultiple
,它使用<ul>
和<li>
。创建一个从CheckboxSelectMultiple
开始的类并替换其render()
方法:
(来自django / forms / widgets.py)
class CheckboxSelectMultiple(SelectMultiple):
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'<ul>']
# 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'<li><label%s>%s %s</label></li>' % (label_for, rendered_cb, option_label))
output.append(u'</ul>')
return mark_safe(u'\n'.join(output))