背景
だが、私はジャンゴのビューに私をリンクするパラメータでURLパターンを持っているとしましょうURLを逆転するために必要なパラメータの名前を取得しますthing
とfeature
:Djangoは
thing = Thing.objects.get(.....)
feature = thing.feature_set.first()
t_name = thing.name
f_name = feature.name
今Djangoは私に特定トンの特定の機能に特化ページに私をもたらしたURLを取得するための素晴らしい機能を提供しますヒンジ。
from django.core.urlresolvers import reverse
url = reverse('thing_feature', thing_name=t_name, feature_name=f_name)
# url == '/things/thing2/features/left-arm'
質問
今、私は、具体的に対処する必要がある状況につまずいてきました:私はそうのようなことを行うことができます。私は回避策を探していないよ - 私は、次のような問題を解決するために探しています:
指定されたURLのname
、私はそのURLを逆転するために必要なkwarg
引数名のリストを得るのですか?
私は、機能get_kwarg_names_for_url
を探しています。それはそうと同じように動作:
url_kwarg_names = get_kwarg_names_for_url('thing_feature')
# url_kwarg_names == ['thing_name', 'feature_name']
url_kwarg_names
は今、私は"thing_feature"
という名前のURLを逆にするために、Djangoのreverse
機能を提供する必要があるすべてのキーワードのリストです。
ご協力いただきましてありがとうございます。
knbkの答えに基づくソリューション
私は、次の解決策を考え出すことができました:
def get_kwarg_names_for_url(url_name):
resolver = get_resolver(get_urlconf())
reverse_data = resolver.reverse_dict[url_name]
pattern_list = reverse_data[0]
'''
Need to specify the 1st pattern because url regexes can
potentially have multiple kwarg arrangments - this function does
not take this possibility into account.
'''
first_pattern = pattern_list[0]
'''
`first_pattern` is now of the form `(url_string, kwarg_list)` -
all we are interested in is the 2nd value.
'''
return first_pattern[1]
私はちょうどウサギの穴に落ちました:urlを逆にし、urlをurlパターンにマッチさせ、urlpatternの正規表現をコンパイルし、正規表現の 'groupindex'を調べてください。 – Monkpit
問題は、必要なURLパラメータ名を知っている前にURLを元に戻すことができないということです。djangoは必要なkwargsがないため、 'reverse( 'thing_feature')'のエラーを発生させます。 –
これを試すことができますhttp://stackoverflow.com/a/1275601私はここで自分自身を試し、代わりに '.items()'を使用して、kwargsを持つタプルの素敵なリストを返します。あなたはもっと深く進む必要があります。良いスタートがあるようですが、残念ながら私は今家に帰ります深くすることはできません。 –
Tiago