Django REST Framework: How to add prefix in URL for versioning

199 views
Skip to first unread message

Shoaib Ijaz

unread,
Nov 5, 2014, 8:01:48 AM11/5/14
to django...@googlegroups.com

I am trying to create version for REST application. Here is my URL Examle

www.myapi.com/foo [default version]
www.myapi.com/v1/foo [version one]

This is the project structure

├── __init__.py
├── settings.py
├── urls.py
├── default_app
 ├── __init__.py
 ├── serializer.py
 ├── models.py
 ├── views.py
 ├── urls.py
 
└── v1_app
├── __init__.py
├── serializer.py
├── models.py
├── views.py
├── urls.py

default_app urls.py

from django.conf.urls import *
from default_app import views as df_views
from rest_framework import routers

router = routers.DefaultRouter()
router.register(r'foo', df_views.viewname, "foo")
urlpatterns = router.urls

v1_app urls.py

from django.conf.urls import *
from v1_app import views as ver_views
from rest_framework import routers

router = routers.DefaultRouter()
router.register(r'foo', ver_views.viewname, "foo")
urlpatterns = router.urls

main file for urls.py

from django.conf.urls import patterns, include, url
from defualt_app import urls as default_urls
from v1_app import urls as v1_urls
from django.contrib.staticfiles.urls import staticfiles_urlpatterns



urlpatterns += patterns('',
    url(r'^', include(default_urls, namespace="default")),
    url(r'^v1/', include(v1_urls, namespace="v1"))
)

urlpatterns += staticfiles_urlpatterns()

My issue is, when i using simple url without any prefix then it is working

www.myapi.com/foo

and when i used version prefix v1 or v2 then it throws error [Page not found (404)]

www.myapi.com/v1/foo

I got this idea from this link http://stackoverflow.com/a/21839842/1558544

If I don't use middleware class then is this possible to get same result?

Thank you

Lee Hinde

unread,
Nov 5, 2014, 11:03:10 AM11/5/14
to django...@googlegroups.com
Swap the urls:
Reply all
Reply to author
Forward
0 new messages