你好。我在更改 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 + react-router 找不到 404 页面