重新加载或加载特定的urls.py文件,而无需重新启动Django服务器

时间:2011-04-14 03:43:20

标签: django multilingual

在Django应用程序中,我有特定的urls.py文件,这取决于用户选择的语言。这意味着如果有人去/ en它应该加载urls_en.py并且如果/ de那么它将加载urls_de.py。这两个都很容易加载。但是当我在我的模板中尝试使用{%url ....%}时,它会抓取其中一个url文件中的第一个条目。

所以这意味着如果我通过将form / en改为/ de来改变语言,urlpatterns会保持相同,因为Django会缓存它们。并且它总是从其中一个文件(第一个已加载的文件)中抓取网址。

有没有办法在执行代码时以编程方式加载一些自定义url模式?或者也许有一些方法来刷新url模式,然后在urls.py文件中我可以捕获语言(这可以通过使用翻译中的get_language()来实现)并加载我需要的一个文件?

解决方案:

Django从版本0.96如果我是正确的(或1.0)允许重写加载的URL并使用特定的urls.py文件。你只需要拥有这样的中间件:

def process_request(self, request):
   request.urlconf = 'custom.urls' # this is the python file path to custom urls.py file

此后Django将使用那里定义的规则。

此外,您可以使用名称空间作为网址,然后从模板中您可以像这样解析网址:{% url namespace:path_to_view args_if_needed %}

如果有人有其他想法,请分享! :)

0 个答案:

没有答案