Django 更新从 3.2 -> 4.0 和 DRF 路径
Django update from 3.2 -> 4.0 and DRF Paths
我想尝试将在 django 3.2.6 上运行良好的 django 应用程序升级到下一个版本,但即使在测试中我也遇到了已弃用的 url
(https://docs.djangoproject.com/en/4.0/ref/urls/)。
所以我替换了 urls.py
中的最后几行:
router = routers.DefaultRouter()
router.register(r'products', views.ProductViewSet, basename = "products")
urlpatterns = [
...,
url('api/', include(router.urls)),
]
至:
urlpatterns = [
...,
path('api/', include(router.urls)),
]
但在具有 url http://127.0.0.1:8003/productspage/
的网站上,我现在收到错误消息:The current path, productspage/api/products/, didn’t match any of these.
使用 django 3.26 的 ajax 调用中 api 的路径有效:
async function doAjax ( ) {
let result = await $.ajax({url: "api/products/"});
}
所以我完全明白为什么这行不通 - 但我该如何(以及在哪里?)修复它?
我考虑过将绝对路径(如${window.location.hostname}/api/products/
)传递给ajax,或者为模板提供basename?我可以在 Django 中修复它吗?
我想尝试将在 django 3.2.6 上运行良好的 django 应用程序升级到下一个版本,但即使在测试中我也遇到了已弃用的 url
(https://docs.djangoproject.com/en/4.0/ref/urls/)。
所以我替换了 urls.py
中的最后几行:
router = routers.DefaultRouter()
router.register(r'products', views.ProductViewSet, basename = "products")
urlpatterns = [
...,
url('api/', include(router.urls)),
]
至:
urlpatterns = [
...,
path('api/', include(router.urls)),
]
但在具有 url http://127.0.0.1:8003/productspage/
的网站上,我现在收到错误消息:The current path, productspage/api/products/, didn’t match any of these.
使用 django 3.26 的 ajax 调用中 api 的路径有效:
async function doAjax ( ) {
let result = await $.ajax({url: "api/products/"});
}
所以我完全明白为什么这行不通 - 但我该如何(以及在哪里?)修复它?
我考虑过将绝对路径(如${window.location.hostname}/api/products/
)传递给ajax,或者为模板提供basename?我可以在 Django 中修复它吗?