Appengine Django模板 - 阅读模板标签

时间:2010-11-22 01:52:11

标签: python django google-app-engine

更新1 新增更新代码

我在app引擎上有一个django模板。目前我的所有数据都在几个模板中,我想从磁盘上读取模板。很简单,但我想在AppEngine中从这些模板中获取值。

例如。 file:p1.html

{%block price%}$259{%endblock%}  
{%block buy%}http://www.highbeam.co.nz/store/index.php?route=product/product&path=6&product_id=116{%endblock%}  
{%block info%}http://www.inov-8.co.nz/oroc280.html{%endblock%}    

我可以将这些模板加载并读取到某个值并继续。

template['price']

将是

  

$ 259

我可以轻松地将数据注入模板,但我想解析块标记之间的数据。

更新2 在aaronasterling(THANKS)的帮助下,最终的代码就是这个。 在app引擎上从Django模板中获取值的最终代码。         path = os.path.join(os.path.dirname( file ),'home / p2.html')

    file = open(path)
    entry = file.read()
    file.close()   
    entry = entry.replace("{% extends \"product.html\" %}","")   

    t = Template(entry) 

    product = {}
    for node in t.nodelist[0].nodelist  :   
       if hasattr(node, 'name'):
          product[node.name] = node.render(Context()) 

2 个答案:

答案 0 :(得分:3)

听起来你已经开枪自杀了。让我们假装我们不应该责备并解决它:

entry = """{%block price%}$259{%endblock%}  
{%block buy%}http://www.highbeam.co.nz/store/index.php?route=product/product&path=6&product_id=116{%endblock%}  
{%block info%}http://www.inov-8.co.nz/oroc280.html{%endblock%}   """

parsedentry = dict([(j[0].split(' ')[-1], j[-1]) for j in [i.partition("%}") for i in entry.split("{%endblock%}")] if j[0].split(' ')[-1]])

print parsedentry['price']

答案 1 :(得分:1)

已修复

更新1 以遍历整个节点树。

更新2 实际测试了它,现在它可以正常工作。

这是一种方法。

from django.template import Template, Context

t = Template(template_string) # get it with open(filename).read() I guess


def get_block_contents(t, block_name, context=None):
    if context is None:
        context = Context()
    stack = t.nodelist[:]
    while stack:
        node = stack.pop()
        if hasattr(node, 'name') and node.name == block_name:
            return node.render(context)
        if hasattr(node, 'nodelist'):
            stack.extend(node.nodelist)
    return False # Or raise an error