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

如何在Django的drf-yasg中调整API端点的显示顺序

调整drf-yasg中API端点的显示顺序

要让Swagger里的端点按你想要的顺序排列,有几个实用的办法:

用标签分组控制顺序

给不同端点设置带排序前缀的标签,Swagger会按标签的字母顺序排列分组,以此实现端点排序:

from drf_yasg.utils import swagger_auto_schema

class YourViewSet(viewsets.ViewSet):
    @swagger_auto_schema(tags=["1-优先展示"])
    def number2(self, request):
        # 你的视图逻辑
        pass

    @swagger_auto_schema(tags=["2-次要展示"])
    def number1(self, request):
        # 你的视图逻辑
        pass

要是不想让前缀显示在Swagger页面上,也可以用CSS隐藏标签里的数字前缀,或者用\u0001这类不可见字符当排序标识。

自定义Schema生成器改排序逻辑

继承默认的生成器,重写路径排序规则,完全自定义排序逻辑:

from drf_yasg.generators import OpenAPISchemaGenerator

class CustomSchemaGenerator(OpenAPISchemaGenerator):
    def get_paths(self, endpoints, components, request, public):
        # 先调用父类方法拿到默认路径字典
        paths = super().get_paths(endpoints, components, request, public)
        # 这里按路径里number后的数字倒序排,你可以改成自己的规则
        sorted_items = sorted(paths.items(), key=lambda x: int(x[0].split('/')[-2].replace('number', '')), reverse=True)
        return dict(sorted_items)

然后在生成Schema视图的时候指定这个自定义生成器:

from drf_yasg.views import get_schema_view
from rest_framework import permissions

schema_view = get_schema_view(
    openapi.Info(
        title="你的API文档",
        default_version='v1',
    ),
    public=True,
    permission_classes=[permissions.AllowAny],
    generator_class=CustomSchemaGenerator,  # 用自定义的生成器
)

调整URL注册顺序(慎用)

部分drf-yasg版本会按照URL在urls.py里的注册顺序展示端点,你可以把想要靠前的端点URL写在前面:

urlpatterns = [
    path('endpoint/number2/', YourViewSet.as_view({'get': 'number2'})),
    path('endpoint/number1/', YourViewSet.as_view({'get': 'number1'})),
]

不过这个方法不保证所有版本都生效,因为有些版本会强制按路径字母排序,所以优先用前两种方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:35:21