2012-01-26 5 views
1

J'ai un fichier urls.py django comme ceci:Django urlconf échoue parfois?

fichier de base:

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

Dans le fichier sp.sp_web.urls, je donne les résultats suivants:

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

L'URL annuelle est parfois chargée. D'autres fois, j'obtiens une erreur 404. Cela arrive avec exactement la même URL valide. Je ne change rien dans l'URL, ou dans le code.

Lorsque j'obtiens l'erreur 404 avec le débogage activé, mon modèle d'URL annuel ne figure pas dans la liste.

Des idées?

Répondre

0

Un couple de choses que j'ai remarqué que cela pourrait être un problème ...

Je remarque que vous n'êtes pas vos espaces de noms pour chaque urls inclus app. Ne sachant pas à quoi ressemblent les autres modules d'urls, je peux supposer qu'il est possible que vous ayez des URLs en collision. Je recommande de faire quelque chose comme ceci:

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

Normalement, lorsque vous avez URL comprend, ils sont pour différentes applications, de sorte que vous voulez les espaces de nommage pour éviter deux applications spécifiant le même modèle d'URL.

En outre, qu'est-ce qui back-tick dans une de vos URL? Vouliez-vous m'attendre à cela?

(r'^player/`$','getlastactivity'), 
0

jdi est sur place, sur l'analyse. Je vais essayer d'expliquer pourquoi exactement est le problème, dans votre cas.

Vous remarquerez que si vous incluez (r'^', include('sp.sp_web.urls') en tant que premier modèle dans le urls.py principal, votre vue se chargera à juste titre toujours.

Lorsque vous l'avez comme dernier motif, la raison pour laquelle il ne correspond pas aux autres fois est que ce motif correspond à un autre motif du motif précédent, par exemple [/w+]. La page de débogage, sur un 404 du modèle d'URL, affiche tous les modèles de sous-URL de l'un des motifs qu'il correspond. C'est exactement pourquoi le motif n'est pas sur les URL affichées sur la page de débogage. Comme pour les mentions jdi, il est recommandé de nommer correctement les urls, donc cela ne se produit pas. Vous pouvez probablement le faire même sans espace de noms, mais vos expressions régulières doivent être correctes, avec le caractère de fin $ inclus, au moins.