找不到 'openapi-schema' 的反向。 'openapi-schema' 不是有效的视图函数或模式名称
Reverse for 'openapi-schema' not found. 'openapi-schema' is not a valid view function or pattern name
我正在尝试使用内置方法记录我的 Django REST API。这是 urls.py
:
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from django.conf.urls import url
from django.views.generic.base import TemplateView
from rest_framework.documentation import include_docs_urls
urlpatterns = [
path('api/', include('api.urls')),
path('admin/', admin.site.urls),
path('', include('main.urls')),
path('swagger-ui/', TemplateView.as_view(
template_name='swagger-ui.html',
extra_context={'schema_url': 'openapi-schema'}
), name='swagger-ui'),
url(r'^.*', TemplateView.as_view(template_name="home.html")),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
static/templates/swagger-ui.html
:
<html>
<head>
<title>Swagger</title>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="//unpkg.com/swagger-ui-dist@3/swagger-ui.css" />
</head>
<body>
<div id="swagger-ui"></div>
<script src="//unpkg.com/swagger-ui-dist@3/swagger-ui-bundle.js"></script>
<script>
const ui = SwaggerUIBundle({
url: "{% url schema_url %}",
dom_id: '#swagger-ui',
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIBundle.SwaggerUIStandalonePreset
],
layout: "BaseLayout"
})
</script>
</body>
</html>
但是,我不明白我们应该在哪里分配openapi-schema
文件?它是 .yml
文件还是 .js
?有没有办法自动生成它?
schema_url
应指向有效的 OpenAPI 规范。 Swagger UI 可以处理 JSON 和 YAML 文件。
将 Swagger UI 指向有效模式的最简单方法是使用动态模式视图,我认为您已经略过。
from rest_framework.schemas import get_schema_view
urlpatterns = [
# ...
# Use the `get_schema_view()` helper to add a `SchemaView` to project URLs.
# * `title` and `description` parameters are passed to `SchemaGenerator`.
# * Provide view name for use with `reverse()`.
path('openapi', get_schema_view(
title="Your Project",
description="API for all things …",
version="1.0.0"
), name='openapi-schema'),
# ...
]
如果您在模板中添加此 URL 模式 url: "{% url schema_url %}",
,它将能够找到动态生成的架构。
我正在尝试使用内置方法记录我的 Django REST API。这是 urls.py
:
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from django.conf.urls import url
from django.views.generic.base import TemplateView
from rest_framework.documentation import include_docs_urls
urlpatterns = [
path('api/', include('api.urls')),
path('admin/', admin.site.urls),
path('', include('main.urls')),
path('swagger-ui/', TemplateView.as_view(
template_name='swagger-ui.html',
extra_context={'schema_url': 'openapi-schema'}
), name='swagger-ui'),
url(r'^.*', TemplateView.as_view(template_name="home.html")),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
static/templates/swagger-ui.html
:
<html>
<head>
<title>Swagger</title>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="//unpkg.com/swagger-ui-dist@3/swagger-ui.css" />
</head>
<body>
<div id="swagger-ui"></div>
<script src="//unpkg.com/swagger-ui-dist@3/swagger-ui-bundle.js"></script>
<script>
const ui = SwaggerUIBundle({
url: "{% url schema_url %}",
dom_id: '#swagger-ui',
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIBundle.SwaggerUIStandalonePreset
],
layout: "BaseLayout"
})
</script>
</body>
</html>
但是,我不明白我们应该在哪里分配openapi-schema
文件?它是 .yml
文件还是 .js
?有没有办法自动生成它?
schema_url
应指向有效的 OpenAPI 规范。 Swagger UI 可以处理 JSON 和 YAML 文件。
将 Swagger UI 指向有效模式的最简单方法是使用动态模式视图,我认为您已经略过。
from rest_framework.schemas import get_schema_view
urlpatterns = [
# ...
# Use the `get_schema_view()` helper to add a `SchemaView` to project URLs.
# * `title` and `description` parameters are passed to `SchemaGenerator`.
# * Provide view name for use with `reverse()`.
path('openapi', get_schema_view(
title="Your Project",
description="API for all things …",
version="1.0.0"
), name='openapi-schema'),
# ...
]
如果您在模板中添加此 URL 模式 url: "{% url schema_url %}",
,它将能够找到动态生成的架构。