问题描述
我遇到了 Django 多站点项目的问题。每个站点都可以处理多种语言。项目通过 URL 处理语言,我们不使用默认语言前缀。例如
-
站点一:root
/
指定俄语,/en
指定站点的英文版本(默认语言为俄语) -
站点二:root
/
指定英文语言,/ru
指定站点俄文版本(默认语言为英文)
Django 有问题。某些站点的框架缓存解析器和存储前缀。
当我开始为不同的域使用不同的默认语言时,我对错误的前缀感到困惑。由于 hist get_resolver()
@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 缓存第一个站点的默认语言前缀,它会影响第二个站点。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)