Шаблон Appengine Django - Читать теги шаблонов - PullRequest
0 голосов
/ 22 ноября 2010

ОБНОВЛЕНИЕ 1 ДОБАВЛЕН ОБНОВЛЕННЫЙ КОД

У меня есть шаблон django в движке приложения. В настоящее время все мои данные находятся в нескольких шаблонах, и я хотел бы прочитать шаблоны с диска. Очень просто, но я хотел бы получить значения из этих шаблонов в AppEngine.

например. файл: 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 (СПАСИБО) окончательный код таков. Финальный код для получения значения из шаблона 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 ]

3 голосов
/ 22 ноября 2010

Звучит так, будто ты выстрелил себе в ногу.Давайте просто притворимся, что мы не виноваты, и исправим это:

1 голос
/ 22 ноября 2010

Обновление 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...