Python Django';str';对象没有属性';as#u widget';
我在django中创建了一个注册表单,并创建了一个模板标记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
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})