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

Django登录页面跳转报错求助:附代码与错误截图

Django登录页面跳转错误排查与解决

错误截图:
错误截图

网页截图:
网页截图

问题相关代码

登录页面HTML模板

<!DOCTYPE html>
<!DOCTYPE html>
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <h1> Signin</h1>
        <form action="/signin" method="post">
            {% csrf_token %}
            <label for="">Username</label>
            <input type="text" id="username" name="username" placeholder="Enter your Username" required>
            <br>
            <label for="">Password</label>
            <input type="password" id="pass1" name="pass1" placeholder="Enter your Password" required>
            <br>
            <button type="submit">Sign in</button>
        </form>
    </body>
</html>

视图函数

def signin(request):
    if request.method == "POST":
        username = request.POST["username"]
        pass1 = request.POST["pass1"]

        user = authenticate(username=username, password=pass1)

        if user is not None:
            login(request, user)
            fname = user.first_name
            return render(request, "authentication/index.html", {fname: "fame"})
        else:
            messages.error(request, "Wrong Credentials")
            return redirect("home")

    return render(request, "authentication/signin.html")

URL配置

from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    path("", views.home, name="home"),
    path("signup/", views.signup, name="signup"),
    path("signin/", views.signin, name="signin"),
    path("signout/", views.signout, name="signout"),
]

错误原因分析

  1. 上下文变量传递错误:视图中return render(request, "authentication/index.html", {fname: "fame"})把变量名和值写反了,应该用模板可识别的字符串作为键,用户真实姓名作为值。当前写法会导致模板无法正确获取用户名,进而引发跳转后的页面渲染异常。
  2. 表单路径硬编码:HTML中form action="/signin"使用硬编码路径,和URL配置里signin/的斜杠规则不匹配,可能触发路径匹配错误。
  3. HTML声明重复:模板开头重复三个<!DOCTYPE html>,属于不规范写法,虽不直接引发错误,但需清理。

修复方案

1. 修正视图上下文传递

把视图中跳转代码改为:

return render(request, "authentication/index.html", {"fname": fname})

这样模板里就能通过{{ fname }}正确获取用户姓名。

2. 优化表单action路径

用Django URL反向解析替换硬编码,修改form标签:

<form action="{% url 'signin' %}" method="post">

该写法会自动匹配URL配置中的name值生成正确路径,避免后续URL修改时同步更改前端代码。

3. 清理重复HTML声明

删除模板开头重复的两个<!DOCTYPE html>,只保留一个。

4. 确保目标页面正确使用变量

在authentication/index.html中,用{{ fname }}渲染用户名,例如:

<h1>Welcome, {{ fname }}!</h1>

修正后完整代码

视图函数

def signin(request):
    if request.method == "POST":
        username = request.POST["username"]
        pass1 = request.POST["pass1"]

        user = authenticate(username=username, password=pass1)

        if user is not None:
            login(request, user)
            fname = user.first_name
            return render(request, "authentication/index.html", {"fname": fname})
        else:
            messages.error(request, "Wrong Credentials")
            return redirect("home")

    return render(request, "authentication/signin.html")

登录HTML模板

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <h1> Signin</h1>
        <form action="{% url 'signin' %}" method="post">
            {% csrf_token %}
            <label for="username">Username</label>
            <input type="text" id="username" name="username" placeholder="Enter your Username" required>
            <br>
            <label for="pass1">Password</label>
            <input type="password" id="pass1" name="pass1" placeholder="Enter your Password" required>
            <br>
            <button type="submit">Sign in</button>
        </form>
    </body>
</html>

内容的提问来源于stack exchange,提问作者Sanjan R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 01:55:34