TransWikia.com

¿Por que me muestra el error 'NoReserveMatch' en el metodo reverse pasandole por parametros el nombre de una url que supuestamente esta correcto?

Stack Overflow en español Asked by Peter Paul on November 7, 2021

Anteriormente me encontraba trabajando en Django en su version 1.11 y pase a la version 2.0

Esto trajo consigo de que algunas pruebas que tenia definida no me funcionan.

A continuacion les pongo el codigo de una:

from rest_framework.test import APITestCase

from django.urls import reverse

class PingApiTestCase(APITestCase):

    def setUp(self):

        self.access_token = self.create_access_token() # metodo que me crea un token para el test

    def test_increase_token_time(self):

        url = reverse('ping')
        data = { 'token': self.access_token.token }
        response = self.client.patch(url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)

Esta es la definicion de la url correspondiente al name ‘ping’ :

from django.conf.urls import url

urlpatterns = [

url(r'^ping/$', 
    ping_view.PingView.as_view(), 
    name='ping')

]

En el test, cuando llega a la linea de invocar el reverse lanza el sigiente error:

{NoReverseMatch}Reverse for ‘ping’ not found. ‘ping’ is not a valid
view function or pattern name.

Alguna idea?

Muchas gracias de antemano

One Answer

La cuestión es:

  1. En el fichero urls.py hay que hacer una pequeña refactorizacion debido a la migracion de Django hacia su version 2.0, o sea:

    from django.urls import path
    
    urlpatterns = [
    
    path(r'^ping/$', 
        ping_view.PingView.as_view(), 
        name='ping')
    ]
    
  2. Debido a que en mi proyecto poseo mas de una aplicacion, en la linea que invoco el metodo reverse, en el parametro debo definir tambien la aplicacion de donde proviene la ruta, o sea:

    def test_increase_token_time(self):
        url = reverse('adminapp:ping')
        data = { 'token': self.access_token.token }
        response = self.client.patch(url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)    
    

Answered by Peter Paul on November 7, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP