【问题标题】:How to check if the url is not in the i18n_pattern?如何检查 url 是否不在 i18n_pattern 中?
【发布时间】:2019-10-22 00:42:01
【问题描述】:

我需要检查请求路径是否在 i18n_pattern 之外,即它不应该有 'lang' 前缀。例如,我有以下 urls.py:

urlpatterns = [
    path('api/', include('api.urls'), name='api'),
]

urlpatterns += i18n_patterns(
    path('', include('core.urls'), name='index'),
    prefix_default_language=False
)

'api' 的reverse 表明无论使用什么语言,它都不会作为前缀。有没有其他方法可以找出当前请求的路径不包含在i18n_patterns 中?谢谢!

【问题讨论】:

  • 您能解释一下为什么需要检查吗?你想做什么?也许这不是正确的方法。
  • @dirkgroten 我正在扩展 LocaleMiddleware 的功能,以使结合 prefix_default_language=False 和语言自动检测成为可能(我提到了这个问题here。所以中间件应该能够确定情况什么时候不应该像我的示例中的 /api/smth 请求那样触摸请求/响应。在我的应用程序中,我通过硬编码异常暂时解决了这个问题,但想找到正确的方法
  • request.resolver_match 给你一个ResolverMatch 对象,记录在here。有了这个,你可以得到一个namespace,也许如果你在某个地方列出你的非翻译命名空间,你可以检查一下。
  • @dirkgroten 谢谢!这似乎是一个很好的出路

标签: python django django-urls django-i18n


【解决方案1】:

您可以使用django.urls.LocalePrefixPattern 来检查 url 是否不在 i18n_pattern 中:

from django.urls import LocalePrefixPattern

pattern = LocalePrefixPattern()

def view(request):
    if not pattern.match(request.resolver_match.route):
        ... 

【讨论】:

    猜你喜欢
    • 2011-12-14
    • 2020-07-05
    • 2012-10-24
    • 2021-10-12
    • 2012-01-11
    • 2018-05-15
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多