我正在开发导航系统,我需要从指向它的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
方法的对象来破解我的方式,但似乎应该有更好的方法。
答案 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
的可调用返回- 叫做。
View.as_view()
答案 1 :(得分:0)
我发现有一个属性foo.h
,我可以调用foo.h
来获取基于类的视图的实例。
感谢@schwobaseggl指出String json = mPrefs.getString("flowManager", null);
是一个具有属性的对象。具有类presfEditor.putString("flowManager", json).apply();
的对象具有属性,这很奇怪且令人惊讶。