Python Django';str';对象没有属性';as#u widget';

Python Django';str';对象没有属性';as#u widget';,python,django,django-forms,django-templates,Python,Django,Django Forms,Django Templates,我在django中创建了一个注册表单,并创建了一个模板标记add_class来创建用户,问题是我遇到了以下错误: 'str' object has no attribute 'as_widget' 到 register\u user.html <form class="form-horizontal" method="POST" action=""> {% csrf_token %} {% if form.errors %} <p>You

我在django中创建了一个注册表单,并创建了一个模板标记
add_class
来创建用户,问题是我遇到了以下错误:

'str' object has no attribute 'as_widget'

register\u user.html

<form class="form-horizontal" method="POST" action="">
    {% csrf_token %}
    {% if form.errors %}
        <p>Your username and password didn't match. Please try again.</p>
    {% endif %}
    <div class="form-group">
        <div class="col-md-12">
            {{ form.username|add_class:'form-control' }}
        </div>
    </div>
    <div class="form-group">
        <div class="col-md-12">
            {{ form.email|add_class:'form-control' }}
        </div>
    </div>
    <div class="form-group">
        <div class="col-md-12">
            {{ form.password|add_class:'form-control' }}
        </div>
    </div>
    <div class="form-group">
        <div class="col-md-12">
            {{ form.confirm_password|add_class:'form-control' }}
        </div>
    </div>
    <div class="form-group">
        <div class="col-md-12">
            <button type="submit" class="btn btn-info btn-block">Register</button>
            <input type="hidden" name="next" value="{% url 'register_user_success' %}"/>
        </div>
    </div>
</form>
模板标记:my_filters.py

from django import template

register = template.Library()


@register.filter(name='add_class')
def add_class(value, arg):
    return value.as_widget(attrs={'class': arg})
我制作了模板标签,以便可以从css添加类

views.py

def register_user(request):
    data = dict()
    if request.method == 'POST':
        form = UserForm(request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            user.set_password(user.password)
            user.save()
            return redirect('/register_user/success/')
    else:
        data['form'] = UserForm()
    return render(request, 'register_user.html', data)

如果表单无效,则重新呈现模板,但不将表单添加到上下文中。因此,当模板要呈现
{{form.username}}
或其他内容时,它找不到它-当找不到变量时,默认情况是使用空字符串。因此,传递给过滤器的是空字符串,因此出现了错误

解决方案是确保始终将表单传递到模板中:

else:
    form = UserForm()
return render(request, 'register_user.html', {'form': form})

请显示视图。@DanielRoseman我添加了view@DanielRoseman你还能看看吗?
def register_user(request):
    data = dict()
    if request.method == 'POST':
        form = UserForm(request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            user.set_password(user.password)
            user.save()
            return redirect('/register_user/success/')
    else:
        data['form'] = UserForm()
    return render(request, 'register_user.html', data)
else:
    form = UserForm()
return render(request, 'register_user.html', {'form': form})