J'utilise le LocaleMiddleware
de Django pour internationaliser une partie du site sur lequel je travaille. Voici mon projet urls.py
:Redirections de LocaleMiddleware sur un modèle d'URL non-i18n
from django.conf.urls import patterns, include, url
from django.conf.urls.i18n import i18n_patterns
urlpatterns = patterns('',
url(r'^api/stuff/(?P<stuff_id>)\d+/$', ApiStuff.as_view()),
)
urlpatterns += i18n_patterns('',
url(r'^stuff/', DoStuff.as_view()),
)
Le problème est, quand ApiStuff.as_view()
renvoie une réponse 404 (autres codes d'erreur se comportent comme prévu), le LocaleMiddleware
exploite la demande de faire rediriger vers /en/api/stuff/<stuff_id>
, même si l'espace de noms /api
est clairement pas dans le i18n_patterns
(à la fin, il génère aussi une erreur 404, mais le contenu de ma réponse d'origine est perdu).
Voici le code de ApiStuff
:
import django.http
from django.views.generic import View
from project.stuff.models import Stuff
class ApiStuff(View):
@staticmethod
def get(request, *args, **kwargs):
stuff_id = kwargs['stuff_id']
try:
stuff = Stuff.objects.get(pk=stuff_id)
except Stuff.DoesNotExist:
return response({"error": "stuff not found"}, 404)
result = stuff.serialize()
return response(result)
def response(data, status=200):
data = json.dumps(data)
return django.http.HttpResponse(data, status=status, content_type='application/json')
J'utilise django 1.6.10 (je sais, il est tard, mais je ne peux pas mettre à jour la version en ce moment).
Ai-je raté quelque chose?
Avez-vous toujours le même problème, même si vous utilisez 'get_object_or_404'? Je me demande si le système se comporte différemment si l'exception 404 est propagée à travers les middlewares. – Risadinha
@Risadinha oui, la redirection est la même avec 'get_object_or_404' – julienc