2012-08-09 8 views
5

Mam niektóre zdefiniowane makra, które są wywoływane z kilku szablonów.Jak renderować makro Jinja2 z widoku do wywoływania?

Na przykład na stronie Produkt znajduje się sekcja Recenzja, która używa makr zdefiniowanych w 'helpers/review.jinja2' do drukowania każdej recenzji. Plik 'helpers/review.jinja2' Ma to dwa makra:

{% macro render_review(request,review) -%} 
{% macro render_review_comment(request,comment) -%} 

Gdy ktoś twierdzi opinię, za pośrednictwem ajax, chcę wrócić renderowany opinię aby dołączyć treści do sekcji Review.

Teraz mam pośrednią szablon 'review/review.jinja2', który wygląda tak:

{% import 'helpers/review.jinja2' as review_helper %} 
{{ review_helper.render_review(request,review) }} 

Ten szablon jest renderowane z widoku:

@view_config(route_name='review.add_review', renderer='review/review.jinja2') 
def add_review(request): 
    return dict(review=my_new_review) 

Ale mam nadzieję, że istnieje lepszy sposób to zrobić to. Czy możliwe jest renderowanie makra zdefiniowanego w szablonie?

Dzięki

+0

właśnie zrobiłem szybkie wyszukiwanie do D Jinja2 za ocs i nie wygląda na to, że można to zrobić. –

Odpowiedz

3

Roztwór można rzeczywiście znaleźć w innym jeden z projektów Armin za - Kolba implementuje get_template_attribute metod (zob here dla źródła metody). Wskazuje to na klasę Jinja2: Template, a dokładniej: Template ".

Nie wiem, czy domyślny renderer Pyramid dla Jinja2 udostępnia tę funkcję, ale powinno być możliwe utworzenie i zarejestrowanie niestandardowego renderera, jeśli domyślny nie pozwoli ci zrobić czegoś takiego (całkowicie teoretycznego):

@view_config(route_name='review.add_review', 
       renderer='helpers/review.jinja2:render_review') 
def add_review(request): 
    return dict(review=my_new_review) 
+0

To nie działało na zwykłej piramidzie. Wygląda na skomplikowaną, ale spróbuję jeszcze raz: D –