2014-12-28 31 views
2

我使用i18n_patterns,但我想使用reverse創建一個鏈接到頁面沒有語言的URL(這樣用戶將被重定向基於cookie和標題和這樣)。當使用i18n_patterns,如何反向網址,無語言代碼

我已經試過

from django.utils.translation import activate, deactivate, get_language 
current_lang = get_language() 
deactivate() 
url = reverse(things) 
activate(current_lang) 

,用來獲取使用activate(target_lang)其他語言版本的作品,但如果我deactivate我剛剛得到的默認語言的網址(/en/account/但我想/account/)。

我已經認爲獲得替代語言版本過於複雜,但是我根本無法管理。任何提示? (如果沒有從URL手工剝LANGUAGE_CODE

更新:我也嘗試過

from django.core.urlresolvers import get_resolver 
get_resolver(None).reverse(*args, **kwargs) 

,但得到NoReverseMatch

回答

1

我認爲最簡單的方法是讓Django的解決與語言前綴的網址然後刪除語言前綴。

您可以編寫以下功能:

import re 
from django.core.urlresolvers import reverse 

def reverse_no_i18n(viewname, *args, **kwargs): 
    result = reverse(viewname, *args, **kwargs) 
    m = re.match(r'(/[^/]*)(/.*$)', result) 
    return m.groups()[1] 

現在,隨時隨地在你的代碼,你可以做這樣的事情:

from myproject.utils import reverse_no_i18n 

def my_view(request): 
    return HttpResponseRedirect(reverse_no_i18n('my_view_name')) 

您可能還需要創建一個自定義{% url %} templatetag這就要求您的自定義功能。

+0

謝謝。我寧願採用更少的黑客方式,但似乎並不存在。 – Mark