Django出现SyntaxError: invalid syntax 'else'语句错误求助
解决Django视图中的SyntaxError语法错误
兄弟别慌!你的错误提示SyntaxError: invalid syntax指向views.py的第38行else:,但问题其实出在else前面的代码少了闭合括号——Python解析器到这里没法正确识别语法结构,才抛出了这个报错。
我帮你找到了两处遗漏右括号的地方,还有一个容易忽略的小问题:
1. 两处缺失的右括号
在
edit_perfil函数里,原代码少了最后一个):
原错误代码:return redirect(reverse('home:perfil')修正后:
return redirect(reverse('home:perfil'))在
trocar_password函数里,同样的问题:
原错误代码:return redirect(reverse('home:perfil')修正后:
return redirect(reverse('home:perfil'))
2. 遗漏的reverse导入
你在代码里用到了reverse函数,但没有导入它,运行时会报NameError,需要在文件顶部加上:
from django.urls import reverse
修正后的完整views.py代码
from django.shortcuts import render, redirect, HttpResponse from django.urls import reverse from contas.forms import ( RegistrationForm, EditPerfilForm, ) from django.contrib.auth.models import User from django.contrib.auth.forms import UserChangeForm, PasswordChangeForm from django.contrib.auth import update_session_auth_hash from django.contrib.auth.decorators import login_required def home(request): return render(request, 'contas/home.html') def register(request): if request.method=='POST': form = RegistrationForm(request.POST) if form.is_valid(): form.save() return redirect(reverse('home:home')) else: form = RegistrationForm() args = {'form':form} return render(request, 'contas/reg_form.html', args) def view_perfil(request): args = {'user': request.user} return render(request, 'contas/perfil.html', args) def edit_perfil(request): if request.method=='POST': form = EditPerfilForm(request.POST, instance=request.user) if form.is_valid(): form.save() return redirect(reverse('home:perfil')) else: form = EditPerfilForm(instance=request.user) args = {'form':form} return render(request, 'contas/edit_perfil.html', args) def trocar_password(request): if request.method=='POST': form = PasswordChangeForm(data=request.POST, user=request.user) if form.is_valid(): form.save() update_session_auth_hash(request, form.user) return redirect(reverse('home:perfil')) else: return redirect(reverse('home:trocar_password')) else: form = PasswordChangeForm(user=request.user) args = {'form': form} return render(request, 'contas/trocar_password.html', args)
顺带提一句:你在contas应用的urls里设置了app_name='contas',但reverse的时候用的是home:perfil,如果perfil视图属于contas应用,应该改成contas:view_perfil(对应urls里的name='view_perfil'),不过先把语法错误修好,这是当前的核心阻塞问题。
把这些修改做好后,你的语法错误应该就能解决了,继续推进你的Django学习吧!
内容的提问来源于stack exchange,提问作者Lucas Cyrne
相关产品推荐
相关产品推荐

