You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:06:47