基于类的DetailView动态选择模板

时间:2013-11-18 13:31:21

标签: django django-views

这一定很简单,但我根本无法绕过它。 我有以下代码:

models.py

class Template(models.Model):
    ...
    display_type = models.CharField(max_length="20", choices=DISPLAYTYPE)
    ...

class Display(models.Model):
    ...
    template = models.ForeignKey(Template)

views.py

class DisplayDetail(DetailView):
    model = Display
    template_name = 'kiosk/display_detail.html'
    ...

class HDMIDisplay(DisplayDetail):
    def get_object(self):
        object = super(DisplayDetail, self).get_object()
        object['template'] = object.template.display_type
        return object

    if template == "static":
        template_name = 'kiosk/HDMI-static.html'
    elif template == "list":
        template_name = 'kiosk/HDMI-list.html'
    else:
        template_name = 'kiosk/HDMI-slideshow.html'

现在,我知道这不会像现在这样编写,但我需要的是如何从模型中获取模板值到视图中,以便能够建立我的条件。

1 个答案:

答案 0 :(得分:3)

您的视图类应如下所示:

class HDMIDisplay(DisplayDetail):

    def get_template_names(self):
        return [self.object.template.display_type]

您还需要在显示选项中指定模板的完整路径(在models.py中),即:

DISPLAYTYPE = (
    ('kiosk/static.html', 'Static'),
    ('kiosk/list.html', 'List'),
    ('kiosk/default.html', 'Default'),

我测试了它,所以这足以解决你的问题