/ / Inversión básica con URL con espacios de nombre para las API versionadas - django, django-rest-framework

Inverso básico con URL con espacios de nombres para API versionadas - django, django-rest-framework

Yo uso django-rest-framework con NamespaceVersioning. Mi urls.py principal se ve así:

...
url(r"^api/v1/", include("my_api.api_urls", app_name="api", namespace="v1")),
...

Y en my_api.api_urls.py:

urlpatterns = [
url(r"^some-endpoint/$", api_views.MyView.as_view(), name="some"),
]

De alguna manera no puedo revertir estas URL. ¿Por qué no puedo hacer esto? Me sale un NoReverseMatch excepción.

reverse("some")

No puedo envolver mi cabeza alrededor del espacio de nombres de django, pero ¿no debería simplemente usar la última ruta definida? Si elimino el argumento del espacio de nombres de la URL principal, todo funciona bien.

editar

Tampoco funciona:

reverse("v1:some")

También podría agregar que, en mi archivo de urls principal, estoy incluyendo varios archivos de urls en el api / v1 / prefix:

...
url(r"^api/v1/", include("my_api.api_urls", app_name="api", namespace="v1")),
url(r"^api/v1/", include("my_other_api.api_urls", app_name="api", namespace="v1")),
...

Respuestas

5 para la respuesta № 1

Al invertir los nombres de URL en Django, tienes que invertir con namespace:url-name patrón.

Su llamada inversa debe verse así:

reverse("v1:some")

Ver: Cómo utilizar reverse() en django

Actualizar: Está utilizando el mismo espacio de nombres en varias entradas de url. Mantener los espacios de nombres de URL únicos.