3

出于调试目的,我想要一种快速的方法(例如在 manage.py shell 中)来查找将作为请求特定 URL 的结果调用的视图。
我知道这就是 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。因为我将文档字符串添加到wrapped,所以我可以确定原始函数名称:

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

希望您可以通过修改装饰器函数来了解如何自省Allow以找出视图函数的名称。

于 2009-09-25T22:32:52.120 回答