标签: jinja2

webapp2 + jinja2:我怎样才能让uri_for()在jinja2-views中工作

如何向模板添加传递模型特定的URL.比方说,我想构建一个编辑链接.我猜,使用uri_for()函数将是一个简单的方法.

但以下给出了"UndefinedError:'webapp2'未定义"

{% webapp2.uri_for("editGreeting", greeting.key().id()) %}
Run Code Online (Sandbox Code Playgroud)

或者我应该在MainPage-Request-Handler中准备这些?如果是这样,我不知道如何将它们添加到每个问候语中.

以下代码示例取自:http: //webapp-improved.appspot.com/tutorials/gettingstarted/templates.html

控制器/处理器

class MainPage(webapp2.RequestHandler):
    def get(self):
        guestbook_name=self.request.get('guestbook_name')
        greetings_query = Greeting.all().ancestor(
            guestbook_key(guestbook_name)).order('-date')
        greetings = greetings_query.fetch(10)

        if users.get_current_user():
            url = users.create_logout_url(self.request.uri)
            url_linktext = 'Logout'
        else:
            url = users.create_login_url(self.request.uri)
            url_linktext = 'Login'

        template_values = {
            'greetings': greetings,
            'url': url,
            'url_linktext': url_linktext,
        }

        path = os.path.join(os.path.dirname(__file__), 'index.html')
        self.response.out.write(template.render(path, template_values))
Run Code Online (Sandbox Code Playgroud)

模板/视图:

<html>
  <body>
    {% for greeting in greetings %}
      {% if greeting.author %}
        <b>{{ greeting.author.nickname }}</b> wrote:
      {% else %}
        An anonymous person wrote:
      {% …
Run Code Online (Sandbox Code Playgroud)

python google-app-engine jinja2 webapp2

18
推荐指数
1
解决办法
6234
查看次数

迭代Flask中的复选框

我有一个Jinja2模板,如下所示:

<form action="" method=post>
    <table>
        <tr>
            <th></th>
            <th>ID</th>
            <th>Title</th>
        </tr>
        {% for page in pages %}
            <tr>
                <td><input type=checkbox name=do_delete value="{{ page['id'] }}"></td>
                <td>{{ page['id'] }}</td>
                <td><a href="{{ page['id'] }}">{{ page['title'] }}</a></td>
            </tr>
        {% endfor %}
    </table>
    With selected:
    <input type=submit value=Delete>
</form>
Run Code Online (Sandbox Code Playgroud)

我有一个函数,当单击"删除"按钮时,应该根据选中的复选框删除页面:

db.session.query(Page).filter(Page.id.in_(page_ids)).delete()
Run Code Online (Sandbox Code Playgroud)

我坚持的是如何遍历所有复选框并形成已page_ids检查的复选框列表.

python jinja2 flask

18
推荐指数
1
解决办法
1万
查看次数

Jinja2继承与块和包含

我无法弄清楚如何使用Jinja2修改包含模板中的块.这是我使用三个文件的示例.

base.html文件:

<html>{% include "content.html" %}</html>
Run Code Online (Sandbox Code Playgroud)

content.html:

<h1>{% block title %}Title{% endblock title%}</h1>
<div>{% block content_body %}Content Body{% endblock content_body%}</div>
Run Code Online (Sandbox Code Playgroud)

story.html

{% extends "base.html" %}
{% block title %}story.title{% endblock title %}
{% block content_body %}story.description{% endblock content_body %}
Run Code Online (Sandbox Code Playgroud)

渲染story.html时,我会得到:

<html>
<h1>Title</h1>
<div>Content Body</div>
</html>
Run Code Online (Sandbox Code Playgroud)

如何使用预期值进行渲染?

python jinja2 pyramid

18
推荐指数
1
解决办法
1万
查看次数

Jinja - 是否有任何内置变量来获取当前的HTML页面名称?

我对Jinja和Flask很新

我想在导航栏中设置不同的背景颜色以指示当前页面.

是否有任何内置的Jinja变量或方法返回当前的HTML页面?如果可能,我希望代码不需要与Python文件通信.

所以,如果我现在在index.html,它将返回"index"或"index.html"

这是我模板中的导航代码:

<ul>
   {% for item in navigation %}
       <a href="{{url_for(item.route)}}">
       <li>
           {{item.text}}
       </li>
       </a>
   {% endfor %}
</ul>
Run Code Online (Sandbox Code Playgroud)

我想添加if语句,以便在当前页面会得到<li>class

{% if ??? %}
   <li class="current">
   ...
   </li>
{% else %}
   ...
{% endif %}
Run Code Online (Sandbox Code Playgroud)

谢谢

html python templates jinja2

18
推荐指数
2
解决办法
2万
查看次数

Jinja2圆形过滤器不圆化

我的模板中有以下代码:

data: [{% for deet in deets %} {{ deet.value*100|round(1) }}{% if not loop.last %},{% endif %} {% endfor %}]
Run Code Online (Sandbox Code Playgroud)

我期待数据四舍五入到小数点后1位.但是,当我查看页面或源时,这是我得到的输出:

data: [ 44.2765833818,  44.2765833818,  44.2765833818,  44.2765833818,  44.2765833818,  44.2765833818,  44.2765833818,  44.2765833818,  44.2765833818,  44.2765833818 ]
Run Code Online (Sandbox Code Playgroud)

这不会四舍五入到小数点后1位.它运行没有模板错误或任何东西,但产生不正确的输出.我对文档的理解,甚至是相关的堆栈溢出问题,都是我的格式应该有效.我错过了什么或做错了什么?

python template-engine jinja2 flask

18
推荐指数
3
解决办法
2万
查看次数

你如何索引jinja模板?

我通过我的python文件将3个列表传递给我的jinja模板.

list1 = [1,2,3,4]
list2 = ['a','b','c','d']
list3 = [5,6,7,8]
Run Code Online (Sandbox Code Playgroud)

所有这些值都是相互对应的,因此1匹配'a'和5,2与'b'和6匹配等.

在我的模板中,我将它们打印在同一行上.如何进行数字索引打印出来?就是这样

1 a 5
2 b 6
3 c 7
Run Code Online (Sandbox Code Playgroud)

我唯一知道的是通过循环直接访问对象

 {%for item in list%}
    {{item}}
Run Code Online (Sandbox Code Playgroud)

python jinja2

18
推荐指数
2
解决办法
4万
查看次数

剥掉jinja2和烧瓶中的空白......为什么我还需要减号?

在我的init .py文件中,我有:

app.jinja_env.trim_blocks = True
app.jinja_env.lstrip_blocks = True
Run Code Online (Sandbox Code Playgroud)

我期望在我的jinja2模板中修剪空白,以便:

<div>
{% if x == 3 %}
<small>{{ x }}</small>
{% endif %}
</div>
Run Code Online (Sandbox Code Playgroud)

将呈现为:

<div>
<small>3</small>
</div>
Run Code Online (Sandbox Code Playgroud)

相反,我得到额外的空格:

<div>

<small>3</small>

</div>
Run Code Online (Sandbox Code Playgroud)

为什么trim_blocks和lstrip_blocks不修剪空白?

python jinja2

18
推荐指数
1
解决办法
1万
查看次数

使用PythonOperator的模板文件的气流

获取BashOperatorSqlOperator获取其模板的外部文件的方法有点清楚地记录下来,但是看看PythonOperator我对文档的理解测试不起作用.我不确定templates_extstemplates_dict参数正确交互以获取文件.

在我的DAG文件夹我创建:pyoptemplate.sqlpyoptemplate.t以及test_python_operator_template.py:

pyoptemplate.sql:

SELECT * FROM {{params.table}};
Run Code Online (Sandbox Code Playgroud)

pyoptemplate.t:

SELECT * FROM {{params.table}};
Run Code Online (Sandbox Code Playgroud)

test_python_operator_template.py:

# coding: utf-8
# vim:ai:si:et:sw=4 ts=4 tw=80
"""
# A Test of Templates in PythonOperator
"""

from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from datetime import datetime

import pprint

pp = pprint.PrettyPrinter(indent=4)


def templated_function(ds, **kwargs):
    """This function will try to use templates loaded from external files"""
    pp.pprint(ds)
    pp.pprint(kwargs)


# Define …
Run Code Online (Sandbox Code Playgroud)

python jinja2 airflow

18
推荐指数
3
解决办法
2万
查看次数

Jinja2模板中的子串

使用ansible进行部署时,我需要删除一个尾随-p子字符串的特定情况.

该字符串somemachine-prod-p应该成为somemachine-prod只有在-p很底.

我看到我可以使用Jinja的子串函数不能满足我的需要,因为我需要去除字符串的结尾,而不是开头.

想法?

substring jinja2 ansible

18
推荐指数
3
解决办法
3万
查看次数

如何使用Python生成html目录列表

我在使用Python生成html文档时遇到了一些问题.我正在尝试创建目录树的HTML列表.这是我到目前为止:

def list_files(startpath):
    for root, dirs, files in os.walk(startpath):
        level = root.replace(startpath, '').count(os.sep)
        if level <= 1:
            print('<li>{}<ul>'.format(os.path.basename(root)))
        else:
            print('<li>{}'.format(os.path.basename(root)))
        for f in files:
            last_file = len(files)-1
            if f == files[last_file]:
                print('<li>{}</li></ul>'.format(f))
            elif f == files[0] and level-1 > 0:
                print('<ul><li>{}</li>'.format(f))
            else:
                print('<li>{}</li>'.format(f))
    print('</li></ul>')
Run Code Online (Sandbox Code Playgroud)

如果只有根目录,一级子目录和文件,它似乎运行良好.但是,添加另一级别的子目录会导致出现问题(因为我认为close标签在结束时输入的次数不够多).但是我很难理解它.

如果不能这样做,有没有更简单的方法呢?我正在使用Flask,但我对模板缺乏经验,所以也许我错过了一些东西.

html python jinja2 flask

17
推荐指数
1
解决办法
1万
查看次数