首页 > 解决方案 > 重新排序 django 核心功能

问题描述

我遇到了 Django 多站点项目的问题。每个站点都可以处理多种语言。项目通过 URL 处理语言,我们不使用默认语言前缀。例如

Django 有问题。某些站点的框架缓存解析器和存储前缀。

当我开始为不同的域使用不同的默认语言时,我对错误的前缀感到困惑。get_resolver()由于 hist ,我必须更改 Django 函数的行为@functools.lru_cache decorator

这是 Django 文件:

def get_resolver(urlconf=None):
    if urlconf is None:
        urlconf = settings.ROOT_URLCONF
    return _get_cached_resolver(urlconf)


@functools.lru_cache(maxsize=None)
def _get_cached_resolver(urlconf=None):
    return URLResolver(RegexPattern(r'^/'), urlconf)

我可以做些什么来禁用缓存吗?或者使缓存依赖于站点?

我试图重新排序 Django 核心模块中的函数

我的解决方案是:

from django.urls.resolvers import URLResolver, RegexPattern

@functools.lru_cache(maxsize=None)
def get_resolver_for_site(site_id, urlconf):
    return URLResolver(RegexPattern(r'^/'), urlconf)


def _get_cached_resolver_for_site(urlconf=None):
    return get_resolver_for_site(get_site().id, urlconf)


@receiver(post_save, sender=SiteSettings)
def clear_url_resolver_cache(sender, **kwargs):
    get_resolver_for_site.cache_clear()


resolvers._get_cached_resolver = _get_cached_resolver_for_site

所以我定义了一个自定义函数,它返回 URL 解析器并缓存它取决于站点。我认为这并不清楚,这是一个拐杖。

谢谢你。

更新

我对错误的前缀感到困惑

如果我的第一个站点和第二个站点有不同的默认语言 - 我在项目中的一个站点有默认语言的 url 前缀(真的我不想要默认语言的语言前缀)。

换句话说,Django 为第一个站点的默认语言缓存前缀,它会影响第二个站点。

标签: pythondjangomultilingualsites

解决方案


推荐阅读