【问题标题】:Django i18n_patterns without trailing slash没有斜杠的 Django i18n_patterns
【发布时间】:2023-03-14 03:41:01
【问题描述】:

我正在尝试摆脱网址中的斜杠。目前,网络服务器已成功删除斜杠和 APPEND_SLASH = false 一切正常,但本地化主页有问题:

http://example.com/en/ - ok
http://example.com/en - Page not found (404)

Django tried these URL patterns, in this order:

^admin/
^en/

The current URL, en, didn't match any of these.

这是我的 urls.py 设置:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
]

urlpatterns += i18n_patterns(
    url(r'^$', views.index, name='index'),
)

是否可以让这些 i18n_patterns 不带斜线工作?

【问题讨论】:

  • 结束斜线是hardcoded,你可以创建自己的子类,但要注意它是一个私有API。
  • 添加斜线并从设置中删除APPEND_SLASH 。去掉它是不好的味道。

标签: python django django-i18n


【解决方案1】:

我最终创建了一个执行以下操作的中间件:

from django.shortcuts import redirect
from django.utils import translation

def add_i18npatterns_trailing_slash(get_response):
    def middleware(request):
        response = get_response(request)
        if response.status_code == 404:
            language_code = translation.get_language()
            if request.path.endswith(language_code):
                return redirect(f'{request.path}/')
        return response
    return middleware

【讨论】:

    猜你喜欢
    • 2012-05-27
    • 2016-06-28
    • 2010-12-08
    • 2011-07-30
    • 2018-12-07
    • 2012-02-05
    • 2018-12-28
    • 1970-01-01
    • 2020-08-03
    相关资源
    最近更新 更多