【发布时间】:2017-07-04 14:09:01
【问题描述】:
我正在使用 Django 的 LocaleMiddleware 将我正在开发的网站的一部分国际化。
这是我项目的urls.py:
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()),
)
问题是,当ApiStuff.as_view()返回404响应(其他错误代码表现如预期)时,LocaleMiddleware操作请求使其重定向到/en/api/stuff/<stuff_id>,即使/api命名空间显然不是在i18n_patterns 中(最后,它也会产生 404 错误,但我原来的响应内容丢失了)。
这里是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')
我正在使用 django 1.6.10(我知道,已经很晚了,但我现在无法更新版本)。
我错过了什么吗?
【问题讨论】:
-
即使你使用
get_object_or_404,你还会遇到同样的问题吗?我想知道如果通过中间件传播 404 异常,系统的行为是否会有所不同。 -
@Risadinha 是的,重定向与
get_object_or_404相同
标签: python django internationalization django-1.6