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 № 1Al 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.