Django urlconf иногда терпит неудачу? - PullRequest
1 голос
/ 27 января 2012

У меня есть файл django urls.py, например:

Базовый файл:

urlpatterns = patterns('',
   (r'^', include('sp.sp_app.urls')),
   (r'^', include('sp.sp_api_activity.urls')),
   (r'^', include('sp.sp_api_player.urls')),
   (r'^', include('sp.sp_web.urls')),
)

В файле sp.sp_web.urls у меня есть следующее:

from django.conf.urls.defaults import *
urlpatterns = patterns('superproof.superproof_web.views',
    (r'^$','index'), #Shows your home page
    (r'^challenge$','spcreatechallenge'),
    (r'^player/`$','getlastactivity'),
    (r'^yearlysummary/','yearlysummary'),
    (r'^processchallenge$','processchallenge'),
    (r'^activity/(\w{32})$','activitydetail'),
)

Ежегодный URL-адрес иногда загружается.В других случаях я получаю ошибку 404.Это происходит с точно таким же действительным URL.Я ничего не меняю ни в URL, ни в коде.

Когда я получаю сообщение об ошибке 404 с включенной отладкой, мой шаблон URL за год не появляется в списке.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 27 января 2012

JDI находится на месте, на анализе. Я постараюсь объяснить , почему именно есть проблема в вашем случае.

Вы заметите, что если вы включите (r'^', include('sp.sp_web.urls') в качестве первого паттерна в основной urls.py, ваш вид будет загружаться всегда правильно.

Когда вы используете его в качестве последнего паттерна, причина, по которой он не совпадает с остальными, состоит в том, что этот паттерн соответствует некоторому другому шаблону в более раннем паттерне, скажем, [/w+]. На странице отладки 404 шаблона url отображаются все шаблоны под-URL одного из шаблонов, которые ему соответствуют. Именно поэтому шаблон не указан в URL-адресах, отображаемых на странице отладки.

Как упоминает jdi, хорошей практикой является правильное размещение имен URL, так что этого не происходит. Вы, вероятно, можете сделать это даже без пространства имен, но ваши регулярные выражения должны быть правильными, с конечным символом $, как минимум.

0 голосов
/ 27 января 2012

Пара вещей, которые я заметил, это может быть проблемой ...

Я заметил, что вы не используете пространства имен для ваших включенных URL для каждого приложения.Не зная, как выглядят другие модули URL, я могу предположить, что у вас могут быть конфликтующие URL.Я бы порекомендовал сделать что-то вроде этого:

urlpatterns = patterns('',
   (r'', include('sp.sp_app.urls')),
   (r'^activity/', include('sp.sp_api_activity.urls')),
   (r'^player/', include('sp.sp_api_player.urls')),
   (r'^web/', include('sp.sp_web.urls')),
)

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

Кроме того, что это за галочка в одном из ваших URL?Вы хотели этого ожидать?

(r'^player/`$','getlastactivity'),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...