3

デバッグの目的で、特定の URL が要求された結果として呼び出されるビューを (manage.py シェルなどで) 検索する簡単な方法が必要です。
これが django.core.urlresolvers.resolve の機能であることは知っていますが、ビュー関数にデコレーターがあると、そのデコレーターが返されます。
例:

>>>django.core.urlresolvers.resolve('/edit_settings/'))
(Allow, (), {})

...ここで、Allow はデコレータであり、装飾しているビューではありません。

urls.py ファイルを手動で検査せずにビューを見つけるにはどうすればよいですか?

4

1 に答える 1

1

これは私の専門分野ではありませんが、役立つかもしれません。

Allowイントロスペクトして、装飾しているオブジェクトを見つけることができる場合があります。

>>>from django.core.urlresolvers import resolve
>>>func, args, kwargs=resolve('/edit_settings/')
>>>func
Allow

あなたは試すことができます

>>>func.func_name

ただし、必要なビュー関数が返されない場合があります。

基本的なデコレータ関数を試していたときに見つけたものは次のとおりです。

>>>def decorator(func):
...    def wrapped(*args,**kwargs):
...        return func(*args,**kwargs)
...    wrapped.__doc__ = "Wrapped function: %s" %func.__name__
...    return wrapped

>>>def add(a,b):
...    return(a,b)

>>>decorated_add=decorator(add)

この場合、試しdecorated_add.func_nameてみると が返されwrappedました。しかし、戻る方法を見つけたかったのaddです。doc 文字列を に追加したのでwrapped、元の関数名を特定できました。

>>>decorated_add.func_name
wrapped
>>>decorated_add.__doc__
'Wrapped function: add'

Allowおそらくデコレータ関数を変更することで、内観してビュー関数の名前を見つける方法を見つけることができれば幸いです。

于 2009-09-25T22:32:52.120 に答える