2013-01-10 5 views
8

Próbuję przekazać niektóre zmienne ze strony podrzędnej do szablonu. To jest mój kod Python:Czy istnieje sposób przekazywania zmiennych rodzicom Jinja2?

if self.request.url.find("&try") == 1: 
     isTrying = False 
    else: 
     isTrying = True 

    page_values = { 
     "trying": isTrying 
    } 

    page = jinja_environment.get_template("p/index.html") 
    self.response.out.write(page.render(page_values)) 

Szablon:

<html> 
    <head> 
    <link type="text/css" rel="stylesheet" href="/css/template.css"></link> 
    <title>{{ title }} | SST QA</title> 

    <script src="/js/jquery.min.js"></script> 

    {% block head %}{% endblock head %} 
    </head> 
    <body> 
    {% if not trying %} 
    <script type="text/javascript"> 
    // Redirects user to maintainence page 
    window.location.href = "construct" 
    </script> 
    {% endif %} 

    {% block content %}{% endblock content %} 
    </body> 
</html> 

i dziecko:

{% extends "/templates/template.html" %} 
{% set title = "Welcome" %} 
{% block head %} 
{% endblock head %} 
{% block content %} 
{% endblock content %} 

Problem polega na tym, chcę przekazać zmienną "stara" do rodzica Czy istnieje sposób, aby to zrobić?

Z góry dziękuję!

Odpowiedz

2

Nie rozumiem twojego problemu. Po przekazaniu zmiennych do kontekstu (tak jak w przypadku próby) zmienne te będą dostępne w elemencie potomnym i elemencie nadrzędnym. Aby przekazać tytuł do rodzica, trzeba użyć dziedziczenia, niekiedy w połączeniu z super: http://jinja.pocoo.org/docs/templates/#super-blocks

Zobacz też to pytanie: Overriding app engine template block inside an if

+0

Tak , Przepraszam, wymyśliłem problem. Odpowiedź jest prosta - nie rób tego. Daje mi wiele problemów. –

+2

"Odpowiedź jest prosta - nie" Zamiast używać zmiennej, zazwyczaj dodaję zagnieżdżony blok do bloku rodzica, a następnie wypełniam go dzieckiem. –

14

Przykład na stronie Jinja2 Tips and Tricks wyjaśnia to doskonale, http://jinja.pocoo.org/docs/templates/#base-template. Zasadniczo, jeśli masz szablon bazowy

**base.html** 
<html> 
    <head> 
     <title> MegaCorp -{% block title %}{% endblock %}</title> 
    </head> 
    <body> 
     <div id="content">{% block content %}{% endblock %}</div> 
    </body> 
</html> 

i szablon dziecko

**child.html** 
{% extends "base.html" %} 
{% block title %} Home page {% endblock %} 
{% block content %} 
... stuff here 
{% endblock %} 

cokolwiek funkcja Python wywołuje renderowanie_szablonu ("Child.html") zwróci stronę html

**Rendered Page** 
<html> 
    <head> 
     <title> MegaCorp - Home </title> 
    </head> 
    <body> 
     <div id="content"> 
      stuff here... 
     </div> 
    </body> 
</html> 
+3

To powinno być prawdopodobnie oznaczone jako poprawna odpowiedź na podstawie tego, w jaki sposób pytanie jest sformułowane. – David