2013-03-16 92 views
11

我已经通过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, {}) 

回答

25

您需要定义返回template_names列表的get_template_names。

from django.views.generic import TemplateView 

class DynamicTemplateView(TemplateView): 

    def get_template_names(self): 
     return ['%s.html' % self.kwargs['template']] 
+0

你的意思是'class DynamixTemplateView(TemplateView)'而不是'def DynamixTemplateView(TemplateView)'我推测。 – Bentley4 2013-03-16 10:58:48

+0

是的,我的意思是类:) – 2013-03-16 11:10:20

+0

顺便说一句,我不得不''返回['%s.html'%self.kwargs ['模板']]'''而不是'[self.kwargs ['模板']] '为了避免在url中输入html后缀。基于类的视图看起来很丑陋。 – Bentley4 2013-03-16 12:15:37

相关问题