2013-03-16 9 views
11

Ich habe die Ref und Themen der klassenbasierten Ansichten Django Dokumentation (Django 1.4) durchsucht, aber ich habe keine Erwähnung gefunden. Wie setze ich Vorlagennamen dynamisch mit klassenbasierten Ansichten? Ich suche nach der klassenbasierte Äquivalent der folgenden Setup:Wie sollten Schablonennamen dynamisch mithilfe von klassenbasierten Sichten festgelegt werden?

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, {}) 

Antwort

25

Sie müssen definieren, get_template_names, die eine Liste von template_names zurückgibt.

from django.views.generic import TemplateView 

class DynamicTemplateView(TemplateView): 

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

Sie meinen 'Klasse DynamixTemplateView (TemplateView)' anstelle von 'def DynamixTemplateView (TemplateView)' ich vermute. – Bentley4

+0

Ja, ich meine Klasse :) –

+0

Btw, ich musste tun '% s.html'% self.kwargs ['template']] 'anstelle von' return [self.kwarts ['template']] 'um zu vermeiden, das HTML-Suffix in die URL einzugeben. Klassenbasierte Ansichten sehen wirklich hässlich imo aus. – Bentley4

Verwandte Themen