《python编程从入门到实践》Django-18.3.1-映射URL

《python编程从入门到实践》Django-18.3.1-映射URL实例代码报错。若在实践中存在Django版本过高,无法实现实例代码的解决方案。

在Django框架中,URL分发器的原理是将URL请求与应用程序中的处理程序关联起来,并将请求发送到与URL匹配的处理程序中。这是通过使用根据一组正则表达式规则匹配URL的URL模式来完成的。

当一个URL请求到达Django应用程序时,URL分发器会将该请求传递给URL模式匹配器,该匹配器会尝试将请求的URL与应用程序中的已定义URL模式进行匹配。如果找到匹配的URL模式,URL分发器将请求转发给与该URL模式相关联的视图函数。如果找不到匹配的URL模式,Django会返回一个“404 Not Found”响应。

在Django中,URL模式定义在应用程序中的urls.py文件中,并且可以嵌套在其他URL模式中以提供更具层次结构的URL结构。 URL模式可以将URL参数提取为视图函数的参数,以便视图函数可以根据请求的参数执行不同的操作。

书中Django<= 2.0 。
但实际使用中我已安装包版本如下:

Package            Version
------------------ -------
asgiref            3.6.0
backports.zoneinfo 0.2.1
Django             4.2.4
pip                20.1.1
setuptools         47.1.0
sqlparse           0.4.4
tzdata             2023.3

1. 第一版修改后的代码

① .\learning_log\learning_log\urls.py
from django.contrib import admin
# from django.conf.urls import url

urlpatterns = [
    path('admin/', admin.site.urls),
    path(r'^learning_logs/', include(('learning_logs.urls', 'learning_logs'), namespace='learning_logs')),
]
② .\learning_log\learning_logs\urls.py
# from django.conf.urls import url
from . import views
from django.urls import path,re_path

urlpatterns = [
    # url(r'^$', views.index, name='index'),
    re_path(r'^$', views.index, name='index'),
]
shell 结果:
(11_env) D:\mine\learning_log>python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified some issues:

WARNINGS:
?: (2_0.W001) Your URL pattern '^learning_logs/' has a route that contains '(?P<', begins with a '^', or ends with a '$'. This was likely an oversight when migrating to django.urls.path().

System check identified 1 issue (0 silenced).
August 09, 2023 - 17:17:19
Django version 4.2.4, using settings 'learning_log.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
网页结果:(报错)
Page not found (404)
Request Method:	GET
Request URL:	http://localhost:8000/
Using the URLconf defined in learning_log.urls, Django tried these URL patterns, in this order:

admin/
^learning_logs/
The empty path didn’t match any of these.

You’re seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.

404错误一般是因为请求的对象不存在,而非Django代码出现错误(一般为500错误)。这意味着代码格式正确,但URL指向有问题。

2. 第二版修改后的代码

检查后发现为代码①中的第二个path不需要在前面加指向,置空即可。

① .\learning_log\learning_log\urls.py
from django.contrib import admin
# from django.conf.urls import url

urlpatterns = [
    path('admin/', admin.site.urls),
    path(r'', include(('learning_logs.urls', 'learning_logs'), namespace='learning_logs')),
]
网页结果:(正常)
Learning Log

Learning Log helps you keep track of your learning, for any topic you 're learning about.
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值