0

模板标签.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>我想对跨度内的每个数据执行删除操作。现在它正在打印<li>单个标签中的每个值。<span>我需要插入每个跨度的输入按钮。

是否可以使用模板标签概念。

谢谢

4

2 回答 2

0

在渲染字段而不是整个表单时,您可以执行类似的操作。

如果您构建一个模板标签来呈现一个字段,您可以使用它的 ID,您需要处理一个 ajax 调用来删除它。

于 2013-09-09T10:28:45.727 回答
0

您最好替换这些字段的小部件。似乎您正在使用 a CheckboxSelectMultiple,它使用<ul>and <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))
于 2013-09-09T13:42:30.793 回答