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

在Django REST Framework的Swagger页面添加多格式Schema链接

解决Django drf-spectacular多Schema切换与下载链接添加问题

一、修复多Schema仅最后一个生效的问题

SwaggerUIBundle的url参数仅支持单个地址,重复赋值会覆盖之前的配置。要实现多Schema切换,需改用urls数组参数,每个元素包含Schema的名称和地址:

在你自定义的swagger-ui.html模板中,找到SwaggerUIBundle初始化代码,修改为:

const ui = SwaggerUIBundle({
  // 替换原有的单个url配置为urls数组
  urls: [
    {
      name: 'JSON格式Schema',
      url: "{% url 'schema-json' %}"
    },
    {
      name: 'YAML格式Schema',
      url: "{% url 'schema-yaml' %}"
    }
  ],
  dom_id: '#swagger-ui',
  deepLinking: true,
  presets: [
    SwaggerUIBundle.presets.apis,
    SwaggerUIStandalonePreset
  ],
  layout: "StandaloneLayout"
  // 保留你原有的其他配置项
});

二、在Swagger页面顶部添加Schema下载链接

在自定义模板的Swagger UI容器上方,添加一个包含下载链接的区块,使用Django模板标签反向生成Schema的访问地址:

<!-- 在<div id="swagger-ui"></div>之前添加以下代码 -->
<div style="padding: 1rem 2rem; background-color: #f8f9fa; border-bottom: 1px solid #e9ecef;">
  <a href="{% url 'schema-json' %}" target="_blank" style="margin-right: 1.5rem; color: #0d6efd;">
    下载JSON格式Schema
  </a>
  <a href="{% url 'schema-yaml' %}" target="_blank" style="color: #0d6efd;">
    下载YAML格式Schema
  </a>
</div>

<div id="swagger-ui"></div>

三、确保Django路由配置正确

在项目的urls.py中,需正确配置drf-spectacular的Schema路由,保证模板中的{% url %}标签能正确反向解析:

from django.urls import path
from drf_spectacular.views import (
    SpectacularAPIView,
    SpectacularJSONAPIView,
    SpectacularYAMLAPIView,
    SpectacularSwaggerView,
)

urlpatterns = [
    # 其他路由...
    path('api/schema/', SpectacularAPIView.as_view(), name='schema'),
    path('api/schema/json/', SpectacularJSONAPIView.as_view(), name='schema-json'),
    path('api/schema/yaml/', SpectacularYAMLAPIView.as_view(), name='schema-yaml'),
    path('api/docs/', SpectacularSwaggerView.as_view(template_name='swagger-ui.html'), name='swagger-ui'),
]

完成以上配置后,Swagger页面顶部会出现两个下载链接,同时顶部的下拉菜单可以切换JSON/YAML两种Schema视图,不会再出现仅最后一个Schema生效的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 13:20:31