2013-03-16 88 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

相關問題