使用中间件排除 Django 应用程序的本地化

发布于 2024-09-26 17:35:20 字数 639 浏览 3 评论 0原文

我需要本地化 django 项目,但仅保留其中一个应用程序(博客)为英语。

我编写这个中间件是为了实现此目的:

from django.conf import settings
from django.core.urlresolvers import resolve

class DelocalizeMiddleware:
    def process_request(self, request):
        current_app_name = __name__.split('.')[-2]
        match = resolve(request.path)
        if match.app_name == current_app_name:
            request.LANGUAGE_CODE = settings.LANGUAGE_CODE

问题是,它假设中间件直接位于应用程序模块中(例如 blog/middleware.py),用于检索应用程序名称。其他项目可能在 blog/middleware/delocalize.py 或其他东西中包含中间件。

检索当前正在运行的应用程序的名称的最佳方法是什么?

I need to localize a django project, but keep one of the applications (the blog) English only.

I wrote this middleware in order to achieve this:

from django.conf import settings
from django.core.urlresolvers import resolve

class DelocalizeMiddleware:
    def process_request(self, request):
        current_app_name = __name__.split('.')[-2]
        match = resolve(request.path)
        if match.app_name == current_app_name:
            request.LANGUAGE_CODE = settings.LANGUAGE_CODE

Problem is, it assumes the middleware lies directly in the application module (e.g. blog/middleware.py) for retrieving the app name. Other projects might have the middleware in blog/middleware/delocalize.py or something else altogether.

What's the best way to retrieve the name of the currently running app?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

爱的故事 2024-10-03 17:35:20

您可以使用 Django 的 resolve 函数来获取当前应用程序名称。

https://docs.djangoproject.com/en/dev/topics/ http/urls/#resolve

You can use Django's resolve function to get the current app name.

https://docs.djangoproject.com/en/dev/topics/http/urls/#resolve

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文