gpt4 book ai didi

python - LocaleMiddleware 在非 i18n url 模式上重定向

转载 作者:太空宇宙 更新时间:2023-11-04 05:04:20 25 4
gpt4 key购买 nike

我正在使用 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(我知道,已经晚了,但我现在无法更新版本)。

我错过了什么吗?

最佳答案

这是一个已在此处跟踪的旧错误:

https://code.djangoproject.com/ticket/17734

404 错误处理程序是 Django 的默认处理程序。为了翻译“未找到”消息,它显然考虑了当前语言。

除非您可以升级到更新的版本,否则您可能需要定义自己的错误处理程序(包括路由/url)。

编辑:

作为变通方法,可以扩展 LocaleMiddleware 和 CommonMiddleware。然而,404 处理程序可能仍然发挥了它的魔力。不过可能值得一试,因为它只需要几行代码。

引用票证:

when you request /api/raising/404/, it is redirecting the user to /en/api/raising/404/ (assuming it detects the language as en). If it tests before redirecting the user if /en/api/raising/404/ is resolvable, it would find out that this would raise a 404 as well and thus would not redirect the user.

编辑 2:

作为替代方案,您可以简单地不使用 i18n_patterns,而只是通过浏览器/cookie/参数检测/切换语言。我为一个项目(包括 Django CMS)做了这件事,在这个项目中我一直遇到这些 URL 的问题。本地化 Django 站点绝对不是使用 i18n URL 模式的先决条件。这只是最重要的事情,但根本没有必要。没有它,本地化也能正常工作。如果您需要有关切换语言的中间件方面的帮助,请发表评论。

关于python - LocaleMiddleware 在非 i18n url 模式上重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44908177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com