Обновление Django с 3.2 -> 4.0 и пути DRF
Я хотел попробовать обновить мое приложение django, которое прекрасно работает на django 3.2.6, до следующего релиза, но даже при тестировании я столкнулся с устаревшим 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)),
]
to:
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.
Путь для api в ajax вызовах с django 3.26 работал:
async function doAjax ( ) {
let result = await $.ajax({url: "api/products/"});
}
Итак, я полностью понимаю, почему это не работает - но как (и где?) мне это исправить?
Я думал о том, чтобы передать абсолютный путь (например, ${window.location.hostname}/api/products/
) в ajax, или предоставить basename для шаблона? Могу ли я исправить это в Django?
Django url
был псевдонимом для re_path
, а не для path
, поэтому в вашем случае
...
re_path('api/', include(router.urls)),
...