Django 从 3.2 -> 4.0 和 DRF 路径更新

Posted

技术标签:

【中文标题】Django 从 3.2 -> 4.0 和 DRF 路径更新【英文标题】:Django update from 3.2 -> 4.0 and DRF Paths 【发布时间】:2022-01-23 23:49:57 【问题描述】:

我想尝试将在 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)),
]

但在网址为 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 中修复它吗?

【问题讨论】:

【参考方案1】:

Django urlre_path 的别名,而不是 path 的别名

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

【讨论】:

但不应该也可以使用path 吗?我知道re_path。不过从技术上讲,您是正确的。 否,因为 DRF 路由器实现仍然使用正则表达式字符串表示法,而不是新语法。 感谢您解决这个问题!

以上是关于Django 从 3.2 -> 4.0 和 DRF 路径更新的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 在 3.2 中工作,但在 4.0(模拟器和设备)中没有触发任何 tableview 方法

iphone sdk 3.2 到 4.0 笔尖编辑

如何在 iPhone OS 3.1x / 3.2 / 4.0 中管理图像(维度)?

iOS 3.2/4.0 上的多个 MPMoviePlayerControllers

Rails 3.2 到 4.0 升级:未定义方法 to_datetime for false:FalseClass

OpenCV 3.2 已安装但无法使用。每次加载版本 4.0