urls.py の URL を生成するために、次のように書いています。
urls = {
'overview': {
r'^$': [ 'Index' ],
r'^/account$': [ 'Account' ],
},
'content': {
r'^/content$': [ 'Index' ]
r'^/content/upload$': [ 'Uploader', 'Default' ]
}
}
urlpatterns = patterns('')
for module, spec in urls.iteritems():
urlpatterns += patterns('views.'+ module,
[
url(regex, (getattr(module.capitalize() , 'as_view'))(), action=view[0])
if len(view) == 1 else
url(regex, (getattr(view[0], 'as_view'))(), action=view[1])
for regex, view in spec.iteritems()
]
)
モジュールoverview
とがあり、それぞれcontent
クラスOverview
ととがあります。Content
Uploader
view
配列 (例:[ 'Index' ]
単一の要素を含む) の場合、モジュールの大文字形式 (例: become ) を使用しoverview
てOverview
ルートを生成します。
url(r'^$', Overview.as_view(), action='Index')
一方、2 つの要素 (例: [ 'Uploader', 'Default' ]
) が含まれる場合、最初の要素はクラス名を指定し、2 番目の要素はメソッドを指定します。
url(r'^$', Uploader.as_view(), action='Default')
お気づきかもしれませんが、問題は、getattr()
最初の引数にクラス参照が必要な の使用にあります。したがって、私の質問は、クラスオブジェクトの識別子を含む文字列からクラス オブジェクトを取得する方法があるかどうかです。Uploader
'Uploader'
免責事項として、これらは私の正確なルートではなく、単なる例です. そしてもちろん、ここでも私の全体的なデザインに関してさらにコメントを歓迎します.