4

私は使用していますが、URLに言語が含まれていないページへのリンクを作成するi18n_patternsために使用したいと考えてreverseいます(Cookieやヘッダーなどに基づいてユーザーがリダイレクトされるように)。

私が試してみました

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

これは、を使用して他の言語バージョンを取得するactivate(target_lang)場合にdeactivate機能しますが、デフォルト言語の URL を取得するだけの場合 (/en/account/ただし、必要です/account/)。

代替言語バージョンを入手するのは非常に複雑だとすでに思っていましたが、これはまったく管理できません。ヒントはありますか?LANGUAGE_CODE( URL から手動で削除せずに)

更新:私も試しました

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

しかし得るNoReverseMatch

4

2 に答える 2

3

最も簡単な方法は、Django に言語プレフィックスを使用して URL を解決させてから、言語プレフィックスを削除することだと思います。

次の関数を記述できます。

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 を作成することもできます。

于 2015-01-01T02:22:36.423 に答える