Handilng url在CreateView上命名为group

时间:2015-12-06 23:36:26

标签: django django-class-based-views

我需要在扩展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?

1 个答案:

答案 0 :(得分:1)

与在基于类的视图中获取任何URL参数的方式相同:

self.modelname = self.kwargs['modelname']

但你绝对不能在__init__中这样做。在任何请求出现之前都会调用该方法,并且通常不应在CBV中覆盖该方法。您可能应该在get_context_data中执行此操作。