首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >你好。更改django项目中显示未找到的页面有问题(404)

你好。更改django项目中显示未找到的页面有问题(404)
EN

Stack Overflow用户
提问于 2019-11-08 16:51:43
回答 2查看 33关注 0票数 0

我已经构建了我的第一个Django项目,并且正在执行“登录页”,并且它正在工作,但是当我当时已经设定了一个条件,如果登录错误,它会返回到登录页面并显示错误消息,如果是正确的,它应该转到一个写有"logadissimo“的页面,但是当我尝试最后一个页面时,我会发现下面的问题:

页面未找到(404)请求方法: GET请求URL:http://localhost:8000/使用在sitetcc.urls中定义的URLconf,Django按以下顺序尝试了这些URL模式: 管理员/登录/登录/提交登录/logado空路径与任何这些都不匹配。 看到这个错误是因为Django设置文件中有DEBUG = True。将其更改为False,Django将显示一个标准404页。

这是我的项目的url.py:

代码语言:javascript
复制
"""
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:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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

谢谢!

EN

Stack Overflow用户

发布于 2019-11-08 17:26:24

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

有几种方法可以将参数传递给redirect,您可以看到一些示例这里。我强烈建议您使用url视图的name,这样以后您就可以在没有任何问题的情况下更改路径的路径。

此外,您也可以像一样声明您的URL,这样您就可以保持项目的整洁,而不是在项目的urls.py上膨胀。

这样做,您的项目的urls.py就会这样:

代码语言:javascript
复制
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如下所示:

代码语言:javascript
复制
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') )

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58770760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档