Как имена шаблонов должны быть установлены динамически с использованием представлений на основе классов?

Я просмотрел ref и темы документации Django на основе классов (Django 1.4), но я не нашел упоминания об этом. Как динамически устанавливать имена шаблонов с помощью представлений на основе классов? Мне нужен эквивалент следующей настройки на основе классов:

urls.py

from django.conf.urls.defaults import *
from mysite.views import dynamic

urlspatterns = patterns('', 
    url(r'^dynamic/(?P<template>\w+)/$', dynamic),)
)

views.py

from django.shortcuts import render_to_response

def dynamic(request, template):
    template_name = "%s.html" % template 
    return render_to_response(template_name, {})

person Bentley4    schedule 16.03.2013    source источник


Ответы (1)


Вам нужно определить get_template_names, который возвращает список template_names.

from django.views.generic import TemplateView

class DynamicTemplateView(TemplateView):

    def get_template_names(self):
        return ['%s.html' % self.kwargs['template']]
person Vladislav Mitov    schedule 16.03.2013
comment
Вы имеете в виду class DynamixTemplateView(TemplateView) вместо def DynamixTemplateView(TemplateView), я полагаю. - person Bentley4; 16.03.2013
comment
Кстати, мне пришлось сделать return ['%s.html' % self.kwargs['template']] вместо return [self.kwargs['template']], чтобы не вводить суффикс html в URL. Представления на основе классов выглядят очень уродливо. - person Bentley4; 16.03.2013
comment
Да, имя_шаблона должно иметь расширение .html. - person Vladislav Mitov; 16.03.2013