You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:49:11