你好。我在更改 django 项目中显示找不到页面的页面时遇到问题(404)

Posted

技术标签:

【中文标题】你好。我在更改 django 项目中显示找不到页面的页面时遇到问题(404)【英文标题】:Hello. I am having a problem to change the pages in my django project that it shows a page not found (404) 【发布时间】:2020-03-05 08:01:24 【问题描述】:

我一直在构建我的第一个 Django 项目,我正在做“登录页面”,它正在工作,但是当那时,我做了一个条件,如果登录错误,它会返回到登录页面并显示错误消息,如果正确,它应该转到写有“logadissimo”的页面,但是当我尝试最后一个时,我得到了以下问题:

找不到页面 (404) 请求方法:GET 请求 URL:http://localhost:8000/ 使用 sitetcc.urls 中定义的 URLconf, Django 按以下顺序尝试了这些 URL 模式:

admin/ login/ login/submit login/logado 空路径不匹配 任何这些。

您看到此错误是因为您的 Django 中有 DEBUG = True 设置文件。将其更改为 False,Django 将显示 标准 404 页面。

这是我项目中的 url.py:

"""
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls.conf import include
from django.urls import path
from core import views



urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', views.login_user),
    path('login/submit', views.submit_login),
    path('login/logado', views.logado)
]

来自应用程序的 urls.py:

from . import views
from django.urls import path

app_name = 'core'

urlpatterns = [
    path('', views.login_user, name='login'),
     path('', views.submit_login, name='submit'),
      path('', views.logado, name='logado')
]

views.py:

from django.shortcuts import render, redirect
from django.views.decorators.csrf import csrf_protect
from django.contrib.auth import authenticate, login
from django.contrib import messages

# Create your views here.

def logado(request):
    return render(request, 'logado.html')

def login_user(request):
    return render(request,'login.html')

@csrf_protect
def submit_login(request):
    if request.POST:
        username = request.POST.get('username')
        password = request.POST.get('password')
        print(username)
        print(password)
        user = authenticate(username=username, password=password)
        if user is not None:
            login(request, user)
            return redirect('/logado/')
        else:
            messages.error(request,'Usuário e senha inválido. Favor tentar novamente:')
    return redirect('/login/')

以及带有文件夹结构和“logado”页面的打印屏幕: https://imgur.com/a/xAsBRHO

谢谢!

【问题讨论】:

【参考方案1】:

那是因为您将硬编码的 URL (/logado/) 传递给 redirect,而该 URL 在您的项目的 url.py 中不存在,因此 Django 无法匹配该路由。

您可以通过多种方式将参数传递给redirect,您可以查看一些示例here。我强烈建议您使用 url 视图的name,这样以后您可以毫无问题地更改路径。

此外,您可以声明您的 URL,例如 this,这样您就可以保持干净,而不会使项目的 urls.py 膨胀。

执行此操作后,您的项目 urls.py 将如下所示:

from django.contrib import admin
from django.urls.conf import include
from django.urls import path
from core import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', include('core.urls'),
]

您的应用程序的urls.py 如下所示:

from . import views
from django.urls import path

app_name = 'core'

urlpatterns = [
    path('', views.login_user, name='login'),
     path('login/submit/', views.submit_login, name='submit'),
      path('login/logado/', views.logado, name='logado')
]

(不要忘记每条路线末尾的/

现在你可以像这样调用你的视图return redirect('core:logado')

【讨论】:

【参考方案2】:

试试return redirect('logado')return redirect('login')语法return redirect('your_view_name')

【讨论】:

由于您使用的是@csrf_protect 装饰器,您需要在您的html 中的<form> 中添加% csrf_token % 模板标签,例如this

以上是关于你好。我在更改 django 项目中显示找不到页面的页面时遇到问题(404)的主要内容,如果未能解决你的问题,请参考以下文章

在 django、pycharm 中找不到页面?

使用 Django + react-router 找不到 404 页面

Django在重定向时找不到模式名称

在 Django 网站上找不到页面 404?

在 django 上运行的 Python Web 应用程序,cPanel 显示错误:找不到页面

ASP.NET MVC 页面无法加载并显示“找不到资源”