Las URL de Django sin una barra diagonal no se redirigen

Tengo dos aplicaciones ubicadas en dos computadoras separadas. En la computadora A, en el archivo urls.py tengo una línea como la siguiente:

 (r'^cast/$', 'mySite.simulate.views.cast') 

Y esa url funcionará tanto para mySite.com/cast/ como para mySite.com/cast . Pero en la computadora BI tienen una url similar escrita como:

 (r'^login/$', 'mySite.myUser.views.login') 

Por alguna razón, en la computadora B, la dirección url mySite.com/login / funcionará, pero mySite.com/login se bloqueará y no volverá directamente a mySite.com/login/ como lo hará en la computadora A. ¿Hay algo que no pude ver? Ambos archivos url.py ven idénticos a mí.

Verifique su configuración APPEND_SLASH en el archivo settings.py

Más información en la documentación de Django.

O puedes escribir tus urls así:

 (r'^login/?$', 'mySite.myUser.views.login') 

El signo de pregunta después de la barra diagonal final hace que sea opcional en regexp. Úselo si, por alguna razón, no quiere usar la configuración APPEND_SLASH.

Esto mejora en la respuesta de @Michael Gendin. Su respuesta sirve la página idéntica con dos URL separadas. Sería mejor que el login redirija automáticamente al login/ de login/ , y luego sirva a esta última como la página principal:

 from django.conf.urls import patterns from django.views.generic import RedirectView urlpatterns = patterns('', # Redirect login to login/ (r'^login$', RedirectView.as_view(url = '/login/')), # Handle the page with the slash. (r'^login/', "views.my_handler"), ) 

Yo también he tenido el mismo problema. Mi solución fue una (| /) antes de la línea final de mi expresión regular.

url(r'^artists/(?P[\d]+)(|/)$', ArtistDetailView.as_view()),

He tenido el mismo problema. En mi caso, fue un remanente rancio de alguna versión antigua en urls.py, antes de staticfiles:

 url(r'^%s(?P.*)$' % settings.MEDIA_URL.lstrip('/'), 'django.views.static.serve', kwargs={'document_root': settings.MEDIA_ROOT}), 

MEDIA_URL estaba vacío, por lo que este patrón coincide con todo.