1

我有一个名为“foo”的会话变量。现在我想根据“foo”的值在我的 cbv 中加载特定的表单和模板。所以我需要将 form_class 和 template_name 放入一个 switch case。

哪个功能适合这个?得到?获取表格?看起来没有什么是真正合适的地方。

任何人的建议或知道另一种方式?:)

4

3 回答 3

3

CBV 浏览器是你的朋友:http ://ccbv.co.uk/projects/Django/1.5/django.views.generic.edit/CreateView/

你需要覆盖

def get_form_class(self):

def get_template_names(self):
于 2013-11-06T13:21:16.407 回答
1

在询问我的FormView CBV 更改 ModelForm 每个请求之后,非常喜欢这个问题,只是没有更改模板,我找到了这个和你的答案

所以基本上我首先要总结一下我测试了Denny Crane的这个答案

class Foo(FormView):
    def dispatch(self, request, *args, **kwargs):
        self.var = request.session['sessionvar']['var']
        if self.var == some_value:
            form_class = form1
            template_name = template1
        elif self.var == another_value:
            form_class = form2
            template_name = template2
        [...]
        return super(Foo, self).dispatch(request, *args, **kwargs)

我确实需要覆盖

def get_form_class(self):

def get_template_names(self):

为此,我需要的正是没有模板部分,因为在我的情况下,我想保持相同的模板,所以这两者的结合确实有效!但是后来我缝了@Serafeim评论

小心 - 这不是 django 的好用法!如果您不想在两个函数中重复您的条件,只需定义一个新函数,该函数将包含 > 您的条件并返回 True/False。现在这个函数可以在 > > get_form_class 和 get_template_names 中使用 :)

我把一切都改成了

仅此代码

def get_form_class(self):
    self.step = self.request.GET.get('step') 
    # for now I am getting this with request.get, till I will get the 
    # grip on session :) my first week on django and web-dev in general 
    if not self.step:
        self.step = 'step1'
    self.form_class = FORM[self.step] #FORM = dict{'step#': ModelForm}
    return self.form_class

这是有效的答案谢谢大家

于 2016-10-23T08:26:08.667 回答
0

如果我要使用 get_form_class() 和 get_template_names 我将不得不在这两个函数中重复我的条件。那将是多余的。这不是首选。

我想出了另一个不重复代码片段的解决方案。

class Foo(FormView):
    def dispatch(self, request, *args, **kwargs):
        self.var = request.session['sessionvar']['var']
        if self.var == some_value:
            form_class = form1
            template_name = template1
        elif self.var == another_value:
            form_class = form2
            template_name = template2
        [...]
        return super(Foo, self).dispatch(request, *args, **kwargs)
于 2013-11-08T12:02:25.043 回答