加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

django – 如何制作模板扩展另一个?

发布时间:2020-12-20 11:14:26 所属栏目:Python 来源:网络整理
导读:我有一些模板,我正在根据我存储在数据库中的一些数据构建: my_template = Template(string_data) 现在我希望该模板扩展另一个模板(也作为文本存储在数据库中).我怎样才能做到这一点?寻找类似的东西: my_template.base = other_template 或者无论语法是什
我有一些模板,我正在根据我存储在数据库中的一些数据构建:

my_template = Template(string_data)

现在我希望该模板扩展另一个模板(也作为文本存储在数据库中).我怎样才能做到这一点?寻找类似的东西:

my_template.base = other_template

或者无论语法是什么.找不到相关的文档.

我在源头看到template.nodelist;我可以预先添加某种扩展节点吗?

添加赏金……将授予第一个能告诉我如何在不破坏django核心的情况下做到这一点的人.

解决方法

无需破解Django的核心.像Ignacio推荐的那样,创建自己的模板加载器非常简单.您只需要子类化django.template.loader.BaseLoader,并实现load_template_source方法.这只是一个字符串作为模板名称,您可以使用它来查找数据库中的项目并返回字符串.

在您的情况下,由于您在单个数据库行中有两个模板元素,您可能想要在extends标记中指定它:

{% extends "myinstance.html_version" %}

并简单地在load_template_source中拆分:

def load_template_source(self,template_name,template_dirs=None):
    name,field = template_name.split('.')
    tpl = TemplateModel.objects.get(name=name)
    return getattr(tpl,field)

当然你想在那里放一些错误处理,但你明白了.然后,您只需在设置TEMPLATE_LOADERS元组中指定此模板加载器.

注释后编辑我仍然不明白为什么,但如果您只想选择要动态扩展的模板,为什么不在处理之前将其插入文本模板中呢?

tpl_string = get_template_from_wherever()
    extender = '{% extends "%s" %}' % template_name_to_extend
    tpl = Template(extender + tpl_string)

仍然是一个黑客攻击,但可能远不如使用模板继承的内部结构.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读