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

Django多参数端点action装饰器的url_path如何指定

DRF @action装饰器多路径参数场景配置方案

正确配置代码

直接将url_path按Django路由参数捕获规则编写即可,完整视图方法装饰器示例:

from rest_framework.decorators import action

class TableColumnViewSet(viewsets.ViewSet):
    @action(
        detail=False,
        url_path=r'table-meta/(?P<catalog>[^/.]+)/(?P<schema>[^/.]+)/(?P<table>[^/.]+)',
        url_name='table-meta'
    )
    def table_meta(self, request, catalog=None, schema=None, table=None):
        # 业务逻辑实现
        return Response()

配置完成后最终生成的接口路径为:/utils/table-meta/{catalog值}/{schema值}/{table值}/

配置规则说明

  • 因为设置了detail=False,该action的路由前缀为注册的utils/,不会自动注入单资源对应的pk路径参数
  • 路径中(?P<参数名>匹配规则)是Django标准的命名路径捕获语法,参数名必须和视图方法接收的关键字参数名完全一致,即catalog/schema/table三个名称不能写错
  • 匹配规则用[^/.]+是DRF生态通用写法:匹配除路径分隔符/、格式后缀分隔符.之外的所有字符,避免和router自带的.json/.api这类格式后缀路由产生匹配冲突
  • 如果项目使用Django 2.0及以上版本、DRF版本在3.10以上,也可以用更简洁的path转化器写法:url_path='table-meta/<str:catalog>/<str:schema>/<str:table>',正则写法是全版本兼容的通用方案
  • 建议同时指定url_name参数,后续可以通过reverse('TableColumn-table-meta', args=[catalog, schema, table])反向生成接口地址

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:51:44