Django 试图呈现自定义表单小部件在我的模板标记中不起作用

Django 试图呈现自定义表单小部件在我的模板标记中不起作用,django,django-forms,django-templates,django-views,Django,Django Forms,Django Templates,Django Views,我有一个模板标签,可以为我呈现一些自定义表单小部件。当我升级到Django 1.8时,它停止了工作。我正在想办法解决这个问题 最终在表单字段的模板中呈现的是: 在下面的模板标记中,我认为问题出在render_to_字符串中。有什么建议吗 这是我的模板标签: from django import template from django.template import loader, RequestContext from django.template.defaultfilters impor

我有一个模板标签,可以为我呈现一些自定义表单小部件。当我升级到Django 1.8时,它停止了工作。我正在想办法解决这个问题

最终在表单字段的模板中呈现的是:

在下面的模板标记中,我认为问题出在render_to_字符串中。有什么建议吗

这是我的模板标签:

from django import template
from django.template import loader, RequestContext
from django.template.defaultfilters import slugify

register = template.Library()

@register.tag
def render_form(parser, token):
    """Renders dynamic form accordingly"""

    bits = token.split_contents()
    if len(bits) < 2:
        raise template.TemplateSyntaxError("%r tag takes at least one argument" % bits[0])

    form = bits[1]
    args = {}

    # Parse extra "asvar" if given
    if len(bits) > 2:
        biter = iter(bits[2:])
        for bit in biter:
            if bit == "as":
                args["asvar"] = biter.next()
            else:
                raise template.TemplateSyntaxError("%r tag got an unknown argument: %r" % (bits[0], bit))

    return RenderFormNode(form, **args)


class RenderFormNode(template.Node):
    def __init__(self, form, asvar=None):
        self.form = form
        self.asvar = asvar

    def render(self, context):
        context = context or {}
        form = template.Variable(self.form).resolve(context)
        try:
            request = template.Variable('request').resolve(context)
        except template.VariableDoesNotExist:
            raise template.VariableDoesNotExist("The `render_form` template tag requires that the request context processor be enabled.")

        # The question type is used to build out the template type.
        template_path_context = {
            'type': slugify(form.template_type)
        }

        template_list = [
            'appname/question_types/%(type)s/form.html' % template_path_context,
            'appname/question_types/%(type)s.html' % template_path_context,
            'appname/%(type)s/form.html' % template_path_context,
            'appname/form.html' % template_path_context
        ]

        # Renders form, and saves to self.asvar if requested
        context.update({'form': form})
        rendered = loader.render_to_string(
            template_list,
            context
        )
        if self.asvar:
            context[self.asvar] = rendered
            return ''
        return rendered
来自django导入模板的

从django.template导入加载器,RequestContext
从django.template.defaultfilters导入slugify
register=template.Library()
@register.tag
def呈现形式(解析器、令牌):
“”“相应地呈现动态表单”“”
位=标记。拆分内容()
如果len(位)<2:
提升模板.TemplateSyntaxError(“%r”标记至少接受一个参数“%bits[0]”)
形式=位[1]
args={}
#如果给定,则解析额外的“asvar”
如果len(位)>2:
比特=iter(比特[2:])
对于比特中的比特:
如果位==“as”:
args[“asvar”]=位。下一步()
其他:
raise template.TemplateSyntaxError(“%r”标记获得未知参数:%r“%(位[0],位))
返回RenderFormNode(表单,**args)
类RenderFormNode(template.Node):
def uuu init(self,form,asvar=None):
self.form=form
self.asvar=asvar
def呈现(自身、上下文):
上下文=上下文或{}
form=template.Variable(self.form).resolve(context)
尝试:
request=template.Variable('request').resolve(上下文)
除template.VariableDoesNotExist外:
raise template.variabledesnotexist(“render\u form”模板标记要求启用请求上下文处理器。”)
#问题类型用于构建模板类型。
模板路径上下文={
“类型”:slugify(form.template\u类型)
}
模板列表=[
'appname/question\u types/%(type)s/form.html'%template\u path\u context,
'appname/question\u types/%(type)s.html'%template\u path\u context,
'appname/%(type)s/form.html'%template\u path\u context,
'appname/form.html'%template\u path\u context
]
#呈现表单,并在请求时保存到self.asvar
update({'form':form})
rendered=loader.render\u到\u字符串(
模板列表,
上下文
)
如果self.asvar:
上下文[self.asvar]=呈现
返回“”
归还
以下是小部件模板:

<div class="radio-button-block">
    {% for fields in form %}
        {% if forloop.first %}
            <label>{{ fields.label|linebreaks }}</label>
            <div class="radio-button">
        {% endif %}
        {% for field in fields %}
            <div class="field">
                {{ field }}
                {% if field.errors %}
                    {% for error in field.errors %}
                        <div class="ui negative message">
                            {{ error }}
                        </div>
                    {% endfor %}
                {% endif %}
                {% if field.choice_feedback %}
                    <div class="feedback">
                        {{ field.choice_feedback|linebreaks }}
                        <a class="close-feedback ss-icon">close</a>
                    </div>
                {% endif %}
            </div>
        {% endfor %}
    {% endfor %}
    </div>
</div>

{%形式的字段为%}
{%if-forloop.first%}
{{fields.label | linebreaks}}
{%endif%}
{字段%中的字段为%1}
{{field}}
{%if field.errors%}
{%字段中有错误。错误%}
{{error}}
{%endfor%}
{%endif%}
{%if field.choice_feedback%}
{{field.choice}反馈{换行}
关闭
{%endif%}
{%endfor%}
{%endfor%}

也许你应该显示模板?只是添加了小部件模板