我需要在扩展CreateView的基于类的视图中从URL命名组中捕获参数。
在URL中,我使用一个基于类的视图传递模型的名称,以创建任何对象类型。
url(r'^(?P<modelname>\w+)/create/$', GenericCreate.as_view()),
视图:
class GenericCreate(CreateView):
def __init__(self, *args, **kwargs):
for app in ['foo', 'bar']:
self.mdlnm_model = models.get_model(app, self.modelname)
if self.mdlnm_model:
break
formcls = get_form_class(self.modelname)
template_name = 'create/' + self.modelname + '_create.html'
try:
get_template(template_name)
except TemplateDoesNotExist:
template_name = 'create.html'
self.form_class = formcls
self.model = self.mdlnm_model
self.template_name = template_name
self.sucess_url = "/%s/" % (self.modelname,),
super(CreateView, self).__init__(*args, **kwargs)
def get_context_data(self, **kwargs):
context = super(GenericCreate, self).get_context_data(**kwargs)
context.update({
'title': self.model._meta.verbose_name,
'creation': True,
'icon': self.modelname + '.png'
})
return context
如何获取名为group&#39; modelname&#39;的网址?并将其分配给self.modelname?
答案 0 :(得分:1)
与在基于类的视图中获取任何URL参数的方式相同:
self.modelname = self.kwargs['modelname']
但你绝对不能在__init__
中这样做。在任何请求出现之前都会调用该方法,并且通常不应在CBV中覆盖该方法。您可能应该在get_context_data
中执行此操作。