有没有办法将变量传递给Jinja2父母?

ihs*_* ih 11 html python google-app-engine jinja2

我正在尝试将一些变量从子页面传递给模板.这是我的python代码:

    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))
Run Code Online (Sandbox Code Playgroud)

模板:

<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>
Run Code Online (Sandbox Code Playgroud)

和孩子:

{% extends "/templates/template.html" %}
{% set title = "Welcome" %}
{% block head %}
{% endblock head %}
{% block content %}
{% endblock content %}
Run Code Online (Sandbox Code Playgroud)

问题是,我想将变量"尝试"传递给父级,有没有办法做到这一点?

提前致谢!

use*_*508 16

Jinja2提示和技巧页面上的示例完美地解释了这一点,http://jinja.pocoo.org/docs/templates/#base-template.基本上,如果你有一个基本模板

**base.html**
<html>
    <head>
        <title> MegaCorp -{% block title %}{% endblock %}</title>
    </head>
    <body>
        <div id="content">{% block content %}{% endblock %}</div>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

和一个儿童模板

**child.html**
{% extends "base.html" %}
{% block title %} Home page {% endblock %}
{% block content %}
... stuff here
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

无论python函数调用render_template("child.html")都将返回html页面

**Rendered Page**
<html>
    <head>
        <title> MegaCorp - Home </title>
    </head>
    <body>
        <div id="content">
            stuff here...
        </div>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

  • 这可能应该根据问题的框架标记为正确的答案. (3认同)
  • 这不能回答问题,即是否可以将变量从子级传递到父级。类似{{扩展“ base.html” is_trying = True%}`之类的东西,然后在父级内部读取`is_trying`。 (2认同)

ssc*_*lvo 8

您只需要在扩展模板之前声明该变量,这样扩展模板就可以访问该变量trying

{% set trying = True %}  <----------- declare variable

{% extends "/templates/template.html" %}
{% set title = "Welcome" %}
{% block head %}
{% endblock head %}
{% block content %}
{% endblock content %}
Run Code Online (Sandbox Code Playgroud)

几年后,但希望它可以帮助后来者


Dim*_*nov 7

我认为您希望在基本布局中突出显示活动菜单,并且您需要这样的东西

{% extends 'base.html' %}
{% set active = "clients" %}
Run Code Online (Sandbox Code Playgroud)

然后使用可以在base.html中使用“active”


vos*_*usa 2

我不明白你的问题。当您将变量传递到上下文时(正如您尝试所做的那样),这些变量将在子级和父级中可用。要将标题传递给父级,您必须使用继承,有时与 super 结合使用: http: //jinja.pocoo.org/docs/templates/#super-blocks

另请参阅这个问题:Overriding app engine template block inside an if

  • “答案很简单 - 不要”我通常不使用变量,而是将嵌套块添加到父块中,然后将其填充到子块中。 (2认同)