Reputation: 8744
I am trying to create a redirect rule:
from: localhost:8000/api/v1/users/.json
to: localhost:8000/api/v1/users.json
what I actually get:
http://localhost:8000/api/v1/users/.json/users.json
Here is my global url file:
from django.conf.urls import include, patterns, url
from django.contrib import admin
urlpatterns = patterns(
'',
url(r'^api/v1/', include('api.urls', namespace='v1')),
url(r'^grappelli/', include('grappelli.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^docs/', include('rest_framework_swagger.urls')),
)
Here is my app specific url file:
from django.conf.urls import patterns, url
from django.views.generic import RedirectView
from rest_framework.urlpatterns import format_suffix_patterns
from api import views
urlpatterns = patterns(
'',
# Redirect rule
url(r'^(?P<url>.*)/.json/$', RedirectView.as_view(
url='%(url)s.json',
permanent=True)),
# Users
url(r'^users/$', views.UserList.as_view()),
url(r'^users/(?P<id>[0-9]+)/$', views.UserDetail.as_view()),
# Sessions
url(r'^sessions/$', views.SessionList.as_view()),
url(r'^sessions/(?P<id>[0-9]+)/$', views.SessionDetail.as_view()),
# Password Resets
url(r'^users/(?P<id>[0-9]+)/reset_password/$',
views.ResetPasswordDetail.as_view()),
# Email Confirmations
url(r'^users/(?P<id>[0-9]+)/confirm_email/$',
views.ConfirmEmailDetail.as_view()),
# Demographics
url(r'^users/(?P<id>[0-9]+)/demographics/$',
views.DemographicsDetail.as_view()),
)
urlpatterns = format_suffix_patterns(urlpatterns)
What am I doing wrong?
Upvotes: 0
Views: 328
Reputation: 309099
You are missing a slash at the beginning of the url
. I would also recommend a more specific pattern than .*
, e.g. \w+
. You can probably remove the trailing slash from the regex as well.
url(r'^(?P<url>\w+)/.json$', RedirectView.as_view(
url='/%(url)s.json',
permanent=True)),
Finally, it's probably best to test with permanent=False
until you're sure it's working, to stop the browser caching incorrect redirects.
Upvotes: 2