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 url
是 re_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 OS 3.1x / 3.2 / 4.0 中管理图像(维度)?
iOS 3.2/4.0 上的多个 MPMoviePlayerControllers