如何在存在装饰器的情况下找到从URL解析的视图

时间:2009-09-25 12:20:42

标签: python django django-urls

出于调试目的,我想快速查找(例如在manage.py shell中)查找将由于请求特定URL而调用的视图。
我知道这就是django.core.urlresolvers.resolve所做的,但是当在view函数上有一个装饰器时,它将返回该装饰器。
例如:

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

...其中Allow是装饰者,而不是它正在装饰的视图。

如何在不手动检查urls.py文件的情况下找到视图?

1 个答案:

答案 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来查找视图函数的名称。