在Django中,如何获取URI解析为的基于类的视图的实例?

时间:2016-06-04 14:00:38

标签: python django uri resolve

我正在开发导航系统,我需要从指向它的URI中获取class based view

我现在正在使用resolve('/path/to/whatever/')来获取ResolverMatch。 ResolverMatch有一个字典项func,它只作为可调用函数链接到class based view,而不是作为对象。

ResolverMatch(func=catalog.views.ThingDetail, args=(), kwargs={'id': '99'}, url_name=thing_detail, app_names=[], namespaces=[])

我需要的是作为对象的对象。我使用inspect获取func方法的对象来破解我的方式,但似乎应该有更好的方法。

2 个答案:

答案 0 :(得分:0)

如果需要,以下内容应该可以为您提供视图类及其实例:

php artisan config:clear

但请注意,不可能以这种方式获取将用于某个请求的实例,因为视图类仅在import importlib rm = resolve('/path/to/whatever/') # ResolverMatch module_name = rm.func.__module__ # 'path.to.views' view_name = rm.func.func_name #'FooView' views = importlib.import_module(module_name) # <module 'path.to.views' from '/path/to/project_root/path/to/views.pyc'> view_klass = getattr(views, view_name) # <class 'path.to.views.FooView'> view_instance = view_klass() # <path.to.views.FooView object at 0x7fe2219528d0> 时被实例化 - rm.func的可调用返回- 叫做。

摘自implementation of View

View.as_view()

答案 1 :(得分:0)

我发现有一个属性foo.h,我可以调用foo.h来获取基于类的视图的实例。

感谢@schwobaseggl指出String json = mPrefs.getString("flowManager", null); 是一个具有属性的对象。具有类presfEditor.putString("flowManager", json).apply(); 的对象具有属性,这很奇怪且令人惊讶。