python - 重新排序 django 核心功能
问题描述
我遇到了 Django 多站点项目的问题。每个站点都可以处理多种语言。项目通过 URL 处理语言,我们不使用默认语言前缀。例如
站点一:root
/
指定俄语并/en
指定站点的英文版本(默认语言为俄语)站点二:root
/
指定英语语言,/ru
指定站点俄语版本(默认语言为英语)
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 为第一个站点的默认语言缓存前缀,它会影响第二个站点。
解决方案
推荐阅读
- excel - 如何根据多个标准制作动态列表?
- keras - 使用 ImageDataGenerator 进行多任务学习
- c# - 如何在这个特定的水模拟节点图中检测平衡
- python - 电阻抗断层扫描和 MCMC
- joomla - 引导模式涵盖内容
- jenkins - Jenkins 可以将构建创建的工件发送给触发构建的用户吗?
- google-sheets - 谷歌表格上的 googlefinance 功能停止工作
- java - Java Printf 精度不是四舍五入
- python - Python:将 Astropy 表转换为数组(使用 Numpy?)进行绘图(在 matplotlib 上)
- node.js - 在 mongodb 中同时使用多个查询