代码之家  ›  专栏  ›  技术社区  ›  Joe Holloway

在桥塔和Django应用程序之间共享Jinja2模板

  •  2
  • Joe Holloway  · 技术社区  · 15 年前

    我正在编写一些基本上实现一些常见网格布局的jinja2模板。我希望能够在一个挂架应用程序和Django应用程序之间共享这个“模板库”。

    在Django的模板上下文中,我遇到了一个小的障碍,可以从模板的“顶层”访问模板上下文,而挂架则将您的上下文包装在本地线程中。 c (或) tmpl_context )变量。

    下面是一些类似的例子来证明这一点。

    丹戈

    from django.shortcuts import render_to_response
    
    ctx = {}
    ctx['name'] = 'John'
    
    return render_to_response('hello.html', ctx)
    

    Helo.HTML:

    Hello {{ name }}
    

    塔柱

    from pylons import tmpl_context as c
    from myapp.lib.base import render
    
    c.name = 'John'
    return render('hello.html') 
    

    Helo.HTML:

    Hello {{ c.name }}
    

    我要做的就是 hello.html 在两个框架中是相同的。

    我看到的一种方法是把姜戈包起来 render_to_response 然后这样做:

    ctx['c'] = ctx
    

    但感觉不太对劲。有人看到其他替代品吗?

    谢谢

    1 回复  |  直到 15 年前
        1
  •  1
  •   Nikhil    15 年前

    你的桥塔版本是什么年代的? render 似乎不赞成 render_jinja2 . 当然, Jinja2 documentation 把它贴错标签 render_jinja Pylons documentation 完全不显示,但是 Pylons 1.0 source code 包括并暗示其用法。

    或者,如果你坚持使用旧版本的塔架,你可以利用这个事实 c.name 与设置相同 c.__dict__['name'] 以及类似的所有属性。这使得设置C的所有属性变得容易,如果你有CTX听写器的话。

    ctx = {'name': 'John'}
    
    # Django
    from django.shortcuts import render_to_response
    render_to_response('hello.html', ctx)
    
    # old Pylons?
    from pylons import tmpl_context as c
    from pylons.templating import render
    c.__dict__.update(ctx)
    render('hello.html')
    
    # new Pylons
    from pylon.templating import render_jinja2
    render_jinja2('hello.html', ctx)
    

    另外,我很惊讶的是,旧的挂架在模板中根据您为导入的对象命名的对象来命名变量。您确定C没有作为参数传递给 提供 ?

    免责声明:我没有安装Django或塔架,所以我不能测试我的任何建议。

    推荐文章