出于调试目的,我想快速查找(例如在manage.py shell中)查找将由于请求特定URL而调用的视图。
我知道这就是django.core.urlresolvers.resolve所做的,但是当在view函数上有一个装饰器时,它将返回该装饰器。
例如:
>>>django.core.urlresolvers.resolve('/edit_settings/'))
(Allow, (), {})
...其中Allow是装饰者,而不是它正在装饰的视图。
如何在不手动检查urls.py文件的情况下找到视图?
答案 0 :(得分: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
来查找视图函数的名称。