在 CreateView 上处理 url 个命名组
Handilng url named group on CreateView
我需要在扩展 CreateView 的基于 class 的视图中捕获来自 URL 命名组的参数。
在 URL 中,我传递模型的名称,使用一个基于 class 的视图来创建任何对象类型。
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
如何获取 URL 命名组 'modelname' 并将其分配给 self.modelname?
与在基于 class 的视图中获取任何 URL 参数的方式相同:
self.modelname = self.kwargs['modelname']
但在 __init__
中绝对不能这样做。该方法在任何请求出现之前就被调用,并且通常不应在 CBV 中被覆盖。您可能应该在 get_context_data
.
中执行此操作
我需要在扩展 CreateView 的基于 class 的视图中捕获来自 URL 命名组的参数。
在 URL 中,我传递模型的名称,使用一个基于 class 的视图来创建任何对象类型。
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
如何获取 URL 命名组 'modelname' 并将其分配给 self.modelname?
与在基于 class 的视图中获取任何 URL 参数的方式相同:
self.modelname = self.kwargs['modelname']
但在 __init__
中绝对不能这样做。该方法在任何请求出现之前就被调用,并且通常不应在 CBV 中被覆盖。您可能应该在 get_context_data
.