Django 2.0.5中urls.py的path()使用报错,求详解path()用法
解决Django 2.0.5中path()的语法错误与用法详解
嘿,我来帮你搞定这个问题!先解决你代码里的直接语法错误,再给你详细拆解path()的用法,以及正则表达式的替代方案。
第一步:修复眼前的语法错误
你代码里的第一个path语句末尾少了个逗号,这是触发语法报错的直接原因!另外,path()不支持正则符号$,匹配根路径直接写空字符串就行。修正后代码如下:
from django.contrib import admin from django.urls import path from .views import home_page urlpatterns = [ path('', home_page), # 补上逗号,同时去掉无效的$符号 path('admin/', admin.site.urls), ]
为什么不能用$?path()到底怎么用?
Django 2.x引入的path()是为了实现简洁的精确路径匹配,它不支持正则表达式(像$这种正则符号会被当成普通字符处理)。如果你需要正则匹配,得用re_path()(它是旧版url()的别名,用法和之前的url()完全一致)。
下面给你详解path()的核心用法:
- 基本结构:
path(route, view, kwargs=None, name=None)route:字符串格式的路径规则,是精确匹配逻辑,不需要正则符号。比如path('admin/', admin.site.urls)就精确匹配/admin/这个路径。- 路径转换器:path()支持用
<转换器类型:变量名>的格式捕获URL中的参数,常用转换器包括:str:匹配除/外的所有字符串(默认类型,不写转换器时默认用它)int:匹配正整数slug:匹配字母、数字、下划线和连字符组成的字符串uuid:匹配UUID格式的字符串path:匹配包括/在内的所有字符串
举几个实用示例:
- 匹配根路径(首页):
path('', home_page)(这就是你要的首页匹配逻辑,无需加$) - 匹配带年份参数的文章归档:
path('articles/<int:year>/', views.year_archive),会匹配/articles/2024/,并把2024作为整数参数year传给视图函数 - 匹配带别名的文章详情:
path('posts/<slug:post_slug>/', views.post_detail),匹配/posts/my-first-post/这类路径
如果一定要用正则表达式怎么办?
要是你需要复杂的正则匹配逻辑,直接用re_path()即可,它和旧版url()的用法完全相同。比如你原本想用$匹配根路径,用re_path的写法是:
from django.contrib import admin from django.urls import path, re_path # 导入re_path from .views import home_page urlpatterns = [ re_path(r'^$', home_page), path('admin/', admin.site.urls), ]
内容的提问来源于stack exchange,提问作者Simanto Bagchi
相关产品推荐
相关产品推荐

