Lee
Lee

Reputation: 8744

Django redirect rule not working

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

Answers (1)

Alasdair
Alasdair

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

Related Questions