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 url was alias to re_path and not to path 所以在你的情况下

...
re_path('api/', include(router.urls)),
...