12
votes

Ajouter Slash ne fonctionne pas

J'ai cet URLCONF et son bien fonctionnant tout en accédant à une slash de fuite.:

APPEND_SLASH=True


6 commentaires

Avez-vous django.middleware.common.commonmiddleware , installé dans votre middleware_classes ?


yep, le communmiddleware est là


Pouvez-vous poster de la trace?


J'ai collé Traceback ici: dpaste.org/mylul


Cette trace de trace a l'air d'avoir un problème dans votre fichier URLS.py - comme il y a une chaîne dedans au lieu d'une URL () tuple quelque part


Publiez tout votre urls.py


5 Réponses :


0
votes

Vous ne savez pas quelle est la cause première, mais celles-ci pourraient vous aider à le contourner ou de le réduire en bas:

(1) Avez-vous essayé d'utiliser la fonction de vue réelle comme argument (au lieu d'une chaîne): xxx

(2) ou ignorer à l'aide de la fonction URL: xxx


0 commentaires

18
votes

append_slash n'arrive pas inconditionnellement - il n'entrave que si, après avoir essayé tous les modèles d'URL existants (et la vue associée, le cas échéant), Django est sur le point de renvoyer un 404.

Si tel est le cas et que la demande initiale n'avait pas de barre oblique à la fin, Django vérifie pour voir si des modèles d'URL correspondraient à une barre oblique suivante. Si tel est le cas, il émet un redirection HTTP.

Si l'un de vos modèles d'URL correspond à la demande d'origine (sans la barre oblique), Django essaiera celui-ci d'abord. Si cela soulève une exception, vous le verrez (je soupçonne que c'est ce qui se passe). Django n'obtiendra jamais à la redirection.


2 commentaires

Son amende fonctionnant avec la barre oblique de fin, comme je l'ai mentionné dans ma question ... PRB ne se produit que lorsque la barre oblique est manquante


Peut-être avec la barre oblique enlevée, il correspond à un modèle d'URL différent que vous attendez



3
votes

Cela résoudra sûrement votre problème. Vous pouvez donner l'URL avec ou sans barre oblique de fin, il vous donnera le même résultat requis.

dans le fichier URLS, P>

urlpatterns = patterns('', url(r'^allvideo/?$','my.views.allvideo'))


4 commentaires

Je pense que c'est la meilleure solution.


Non, ce n'est pas parce que vous aurez deux URL pour la même page.


Comme @natim a dit, il suffit d'ajouter un certain contexte: il est mauvais pour le référencement d'avoir deux URL au lieu d'un. En outre, vous ne devriez pas avoir à coder autour d'un cadre supposé déjà une solution.


Voir Moréthanseven.net/2009/02/10/Append- SLASHES-URLS-DJANGO Pour une discussion approfondie de la raison pour laquelle il s'agit d'une mauvaise solution.



0
votes

Même s'il semble incroyable, j'avais le même problème et je ne fais que redémarrer le serveur de développement résolu. Juste pour se souvenir:

python manage.py runserver


0 commentaires

4
votes

Si vous avez ajouté une partie de votre propre middleware, l'ordre du middleware est important. J'ai eu un cas similaire où la barre oblique travaillait avant et que l'ajout d'un élément de middleware a cassé. Après avoir commuté la commande, tout a commencé à travailler à nouveau.


2 commentaires

Pour moi, cela a été corrigé en veillant à ce que la commonmiddleware était inférieure localemiddleware.


Cela a fonctionné pour moi en migration vers Django 3.1: docs.djangoproject .Com / fr / 3.1 / Thèmes / http / middleware / ...