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

Django urls.py中<str:slug>与<slug:slug>的区别及路由嵌套问题

Django urls.py路径参数配置问题解答

1. <str:slug>与<slug:slug>的区别及选型建议

  • 核心区别:
    • <str:>是Django默认的通用字符串转换器,仅限制不能包含路径分隔符/,除此之外对字符类型没有任何约束,可以匹配中文、特殊符号等任意非/的字符。
    • <slug:>是专为slug场景设计的专用转换器,严格限制只能匹配ASCII字母、数字、连字符-、下划线_,和Django模型层SlugField字段的合法值规则完全对齐。
  • 选型建议:
    如果你的路径参数对应模型中SlugField存储的标准slug值,优先选<slug:>,路由层会自动完成格式校验,不符合规则的请求会直接返回404,不需要在视图中额外做合法性判断。如果你的自定义slug允许包含中文、emoji等非ASCII字符,再选择<str:>。

2. 同一条路由支持配置多个slug类型参数

完全支持,你可以按照路径层级按需配置多个不同的路径参数,只要参数命名不重复即可,示例配置如下:

# urls.py 示例
from django.urls import path
from . import views

urlpatterns = [
    # 同时配置分类slug和文章slug
    path('article/<slug:category_slug>/<slug:post_slug>/', views.post_detail, name='post_detail'),
]

对应的视图函数可以直接接收两个参数使用:

# views.py 示例
def post_detail(request, category_slug, post_slug):
    # 后续可以用两个slug参数做查询等逻辑
    ...

内容的提问来源于stack exchange,提问作者ilsurealism

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:27:02