Джанго URL-адреса без Слэша не редирект


у меня есть два приложения на двух разных компьютерах. На компьютере а, в urls.py файл у меня есть строка, как показано ниже:

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

и этот url будет работать для обоих mySite.com/cast/ и mySite.com/cast. Но на компьютере B у меня есть аналогичный url-адрес, написанный как:

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

почему-то на компьютере B the url mySite.com/login/ будет работать, но mySite.com/login будет висеть и не будет направлять обратно в mySite.com/login/ как это будет на компьютере A. Есть ли что-то, что я пропустил? Оба url.py файлы выглядят одинаково для меня.

5 65

5 ответов:

проверьте APPEND_SLASH установка в settings.py файл

дополнительная информация в документах django

или вы можете написать свои URL-адреса следующим образом:

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

знак вопроса после конечной косой черты делает его необязательным в регулярном выражении. Используйте его, если по каким-то причинам вы не хотите использовать параметр APPEND_SLASH.

Это улучшает ответ @Michael Gendin. Его ответ служит идентичной странице с двумя отдельными URL-адресами. Было бы лучше иметь login автоматическое перенаправление на login/, а затем служить последним в качестве главной страницы:

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"),
)

У меня тоже была такая же проблема. Мое решение было поставлено ( / / ) перед конечной строкой моего регулярного выражения.

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

У меня была такая же проблема. В моем случае это был несвежий остаток от какой-то старой версии в urls.py, из Перед staticfiles:

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

MEDIA_URL был пуст, поэтому этот шаблон соответствовал всему.