在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 %}
如果有人有其他想法,请分享! :)