2009-09-25 3 views
3

Для целей отладки я бы хотел быстро (например, в оболочке manage.py) посмотреть, какое представление будет вызываться в результате определенного Запрошен URL.
Я знаю, что это то, что django.core.urlresolvers.resolve делает, но при наличии декоратора в функции просмотра он вернет этот декоратор.
Пример:Как найти, какой вид разрешен с помощью url в присутствии декораторов

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

... где Разрешать декоратор, а не мнение это украшения.

Как я могу найти представление без ручного осмотра файлов urls.py?

ответ

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. Потому что я добавил строку документации к wrapped, я мог бы определить первоначальное название функции:

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

Будет надеяться, что вы можете узнать, как самоанализ Allow, чтобы узнать имя функции зрения, возможно, путем изменения функции декоратора ,