如何在Django 1.8中动态更改模板路径

时间:2015-10-22 12:39:19

标签: django

我想将移动版本添加到我的网站,因此我需要动态更改模板路径以获取移动模板目录或桌面目录。

由于版本1.8以后TEMPLATE_DIRS已被弃用,我尝试更改DIRS后端的DjangoTemplates选项,但它不起作用。

1 个答案:

答案 0 :(得分:0)

我遇到同样的挑战,我在这里发布我的代码。我使用django_mobile中的get_flavor来检测要显示的内容,我想使用django_admin_bootstrapped和常规django admin的标准管理目录(已安装)。此外,我只想干扰加载器与管理页面而不是常规页面 - 在后一种情况下,加载器什么都不做。

所以这对我有用:

import os.path

from django.template.loaders.base import Loader 
from django.template.loader import LoaderOrigin
from django.template import TemplateDoesNotExist

from django_mobile import get_flavour

class Myloader(Loader):
    is_usable = True #this line is necessary to make it work

    def load_template_source(self, template_name, template_dirs=None):
         path_split = template_name.split("/")
         if not u'admin' in path_split:
            raise TemplateDoesNotExist
        template_short_name = path_split[-1]

        if get_flavour() == "mobile":
            basepath = r'/path/to/django_admin_bootstrapped/templates/admin'
            path = os.path.join(basepath,template_short_name)
        else:
            basepath = r'/path/to/django/contrib/admin/templates/admin'
            path = os.path.join(basepath,template_short_name)
        try:
            with open(path,"r") as f1:
                template_string = f1.read()
        except IOError:
            raise TemplateDoesNotExist

        template_origin = LoaderOrigin(template_short_name, self.load_template_source, template_name, template_dirs)

        return (template_string, template_origin)

如果您想通过不同的方式区分模板路径,例如通过url中的名称,您需要通过查找inntemplate_name来替换“if get_flavour()==”mobile“”。