【问题标题】:How should template names be set dynamically using class based views?如何使用基于类的视图动态设置模板名称?
【发布时间】:2013-03-05 02:19:33
【问题描述】:

我已经搜索了基于类的视图 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, {})

【问题讨论】:

    标签: django django-class-based-views


    【解决方案1】:

    您需要定义返回模板名称列表的 get_template_names。

    from django.views.generic import TemplateView
    
    class DynamicTemplateView(TemplateView):
    
        def get_template_names(self):
            return ['%s.html' % self.kwargs['template']]
    

    【讨论】:

    • 我猜你的意思是class DynamixTemplateView(TemplateView) 而不是def DynamixTemplateView(TemplateView)
    • 顺便说一句,我不得不使用return ['%s.html' % self.kwargs['template']] 而不是return [self.kwargs['template']] 以避免在url 中输入html 后缀。基于类的视图看起来很丑。
    • 是的,template_name 中应该有 .html 扩展名。
    猜你喜欢
    • 2011-12-18
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 2011-07-30
    • 2015-08-10
    • 1970-01-01
    相关资源
    最近更新 更多