2011-04-21 77 views
5

從url名稱獲取通用視圖類的建議方式是什麼?Django:從url名稱獲取通用視圖類

url(r'^$', HomeView.as_view(), name='home') 

因此,'家'我想要得到類HomeView。

+0

你可能想圓走另一條路:從視圖類的名稱,URL名稱。爲什麼?因爲類名是更高度結構化的世界。例如,在輸入錯誤後,如果有問題的行包含的名稱不能在那裏解決,則會得到更有意義的錯誤消息。 (對於基於類的視圖,你可以使用'.as_view()'幫助你使解析和表示更簡單。) – 2014-11-14 13:59:10

回答

8

我從以下問題得到的get_class:Does python have an equivalent to Java Class.forName()?

url = reverse('home') 
resolver_match = resolve(url) 
func = resolver_match.func 
module = func.__module__ 
view_name = func.__name__ 

clss = get_class('{0}.{1}'.format(module, view_name)) 

這是我想出了自己,我到其他的答案很開放。

6

通過Pickels'答案的啓發:

import importlib 
from django.core.urlresolvers import reverse, resolve 

view_name = 'my_view_name' 

view_func = resolve(reverse(view_name)).func 
module = importlib.import_module(view_func.__module__) 
view = getattr(module, view_func.__name__) 
1

Django 1.9引入2個屬性到as_view()返回的功能。 view_initkwargsview_class

與泡菜結合這個答案:

url = reverse('home') 
view = resolve(url).func.view_class