es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Actualización de Django de 3.2 -> 4.0 y Rutas de DRF

Quería intentar actualizar mi aplicación de Django que funciona perfectamente en Django 3.2.6 a la próxima versión, pero incluso en las pruebas me encontré con el método obsoleto url (https://docs.djangoproject.com/en/4.0/ref/urls/).

Entonces reemplacé las últimas líneas en el archivo urls.py:

router = routers.DefaultRouter()
router.register(r'products', views.ProductViewSet, basename = "products")

urlpatterns = [
    ...,
    url('api/', include(router.urls)),
]

por:

urlpatterns = [
    ...,
    path('api/', include(router.urls)),
]

Pero en un sitio con la URL http://127.0.0.1:8003/productspage/ ahora obtengo el mensaje de error: La ruta actual, productspage/api/products/, no coincide con ninguna de estas.

La ruta para la API en las llamadas ajax con Django 3.26 funcionaba:

async function doAjax() {
    let result = await $.ajax({url: "api/products/"});
}

Entonces entiendo completamente por qué esto no funcionaría, pero ¿cómo (y dónde?) lo arreglo?

Pensé en proporcionar una ruta absoluta (como ${window.location.hostname}/api/products/) para ajax, o proporcionar un basename para la plantilla. ¿Puedo arreglarlo en Django?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el cambio en el archivo urls.py de utilizar url a utilizar path causó un problema con el enrutamiento de URL. Para solucionarlo, puedes agregar un prefijo a las URL de la API en tu archivo urls.py para evitar conflictos con otras URL. Por ejemplo, puedes cambiar el patrón de URL de la API a path('api/v1/', include(router.urls)) de manera que tus URL de la API sean ahora /api/v1/products/ en lugar de solo /api/products/.

    Alternativamente, también puedes modificar la llamada AJAX para utilizar una URL absoluta: let result = await $.ajax({url: "/api/products/"}); Esto garantizará que la llamada siempre alcance la URL correcta, independientemente de la página desde la que se realice.

    En cualquier caso, es mejor evitar el uso de window.location.hostname en tus URL, ya que puede causar problemas con las solicitudes entre dominios. Es mejor utilizar URL absolutas o relativas, y asegurarte de que los patrones de URL en Django coincidan con las URL que estás utilizando en tus llamadas AJAX.

Comments are closed.