标签: jinja2

使用Jinja将数据作为JSON对象从Python发送到Javascript

我正在尝试将一个lat/long点作为JSON对象从Python发送到javascript.我正在使用Flask所以以下是Jinja模板..

蟒蛇:

@app.route('/')
def homepage():
    lat_lng = (39.7392,-104.9847) 
    return render_template("index_v2.html", lat_lng=json.dumps(lat_lng))
Run Code Online (Sandbox Code Playgroud)

使用js的html:

<script type='text/javascript'>
    var map;
    function initialize() {
      // Create the map.
      var lat_lng = eval('({{ lat_lng }})')
      map = new google.maps.Map(document.getElementById('map-canvas'), {
        zoom: 8,
        center: new google.maps.LatLng(lat_lng)
      });

    }

    google.maps.event.addDomListener(window, 'load', initialize);
  </script>
Run Code Online (Sandbox Code Playgroud)

我正在使用eval,因为变量= {{data}}的标准Jinja表示法不起作用,我发现了一些eval是必要的建议.有什么建议?

javascript python json jinja2 python-2.7

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

你在哪里存储变量在jinja?

我有五页具有相同的页面布局和结构,但有一些不同的颜色,文本等,所以这是一个理想的模板环境.我决定使用Jinja2,可能还有烧瓶.我已经阅读了文档和一些在线教程,这些教程解释了很多关于你可以在页面上使用模板做什么,但没有太多关于如何将变量发送到页面的内容.

  • 您在哪里存储特定于页面的变量?
  • 代码如何知道请求了哪个页面以及要加载哪些变量?

python templates jinja2

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

如何从另一个文件导入自定义jinja2过滤器(并使用Flask)?

我有一个jinja_filters.py文件,里面有几十个自定义过滤器.现在我有多个需要使用这些过滤器的Flask应用程序.(我不确定我的问题是否是Flask特定的.)

完成我想要的一个hacky方法是:

app = Flask(__name__)

import jinja_filters

@app.template_filter('filter_name1')
def filter_name1(arg):
    return jinja_filters.filter_name1(arg)

@app.template_filter('filter_name2')
def filter_name2(arg):
    return jinja_filters.filter_name2(arg)

...
Run Code Online (Sandbox Code Playgroud)

这样做的"正确"方法是什么?

编辑:理想情况下,我不必列出每个过滤器名称.因此,当我向jinja_filters.py添加新过滤器时,我不必更新任何其他代码 - 我的所有应用程序都可以立即使用它.

python jinja2 flask

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

使用Jinja2模板缩小Flask应用程序的HTML输出

是否有Flask或Jinja2配置标志/扩展名来在渲染模板后自动缩小HTML输出?

python wsgi web-applications jinja2 flask

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

如何防止HTML代码中的换行导致输出空间?

我在这里看到了这个问题,有些是通过评论标签解决它或打破这样的标签:

 <i><!--
-->t does not work on the first level with tabspace = 2
   beside it looks horrible.  
<a
 >nnoying<
/a> is it not?
Run Code Online (Sandbox Code Playgroud)

我记得好像我曾经看到过一些诡计

<a>&dont_put_here_space_please;
  tricky ampersand code.
Run Code Online (Sandbox Code Playgroud)

有这样的事吗?

我正在使用jinja2 python模板引擎.它有一些防空间技巧吗?

更新:

有了jinja2,感谢dav1d,我能想出的最短路径是:

<a>{% if true -%}
  No space in the output before this text.
</a>{% endif -%}
  Nor after.
Run Code Online (Sandbox Code Playgroud)

这样做有什么简短的方法吗?

html jinja2

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

如何选择/减少Flask/Jinja中的词典列表

我有一个带有字典列表的Jinja模板.订单很重要.我想根据字典的键/值减少列表或查找值.这是一个例子:

{%
    set ordered_dicts = [
        {
            'id': 'foo',
            'name': 'My name is Foo'
        },
        {
            'id': 'bar',
            'name': 'My name is Bar'
        }
    ]
%}
Run Code Online (Sandbox Code Playgroud)

如果我有变量some_id = 'foo',我如何'My name is Foo'退出ordered_dictsJinja模板?

我试着select()selectattr()想不出他们出基于文档.这是我试过的:

{{ ordered_dicts|selectattr("id", "foo") }}
Run Code Online (Sandbox Code Playgroud)

那输出:

<generator object _select_or_reject at 0x10748d870>
Run Code Online (Sandbox Code Playgroud)

我不认为我理解使用select()selectattr()正确.

我是否需要遍历列表并手动执行查找?


更新:

正如codegeek和gipi指出的那样,我需要用生成器做这样的事情:

{{ ordered_dicts|selectattr("id", "foo")|list }}
Run Code Online (Sandbox Code Playgroud)

由此产生的错误:TemplateRuntimeError: no test named 'foo',澄清了如何selectattr()工作.第二个参数必须是内置测试之一.据我所知,这些测试都不会让我检查与键相关的值是否与另一个值匹配.这是我想做的事情:

{{ ordered_dicts|selectattr("id", "sameas", "foo")|list …
Run Code Online (Sandbox Code Playgroud)

python jinja2 flask

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

在Jinja2中将变量从子模板传递给父模板

我希望有一个父模板和许多子模板,它们有自己的变量传递给父模板,如下所示:

parent.html:

{% block variables %}
{% endblock %}

{% if bool_var %}
    {{ option_a }}
{% else %}
    {{ option_b }}
{% endif %}
Run Code Online (Sandbox Code Playgroud)

child.html:

{% extends "parent.html" %}

{% block variables %}
    {% set bool_var = True %}
    {% set option_a = 'Text specific to this child template' %}
    {% set option_b = 'More text specific to this child template' %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

但变量最终在父级中未定义.

jinja2

19
推荐指数
1
解决办法
7082
查看次数

是否可以使用Ansible/Jinja2压缩列表列表?

我的基本问题是,在创建一组aws服务器时,我想配置它们以了解彼此.

创建每个服务器后,它们的详细信息将保存在已注册的"服务器"var中(如下所示).我真正希望在创建之后能够执行的任务是这样的:

- name: Add servers details to all other servers
  lineinfile:
    dest: /path/to/configfile
    line: "servername={{ item.1.private_ip }}"
  delegate_to: "{{ item.0.public_dns_name }}"
  with_nested:
    - list_of_servers
    - list_of_servers
Run Code Online (Sandbox Code Playgroud)

将列表提供两次到'with_nested'是必不可少的.

获取列表清单很容易:

"{{ servers.results | map(attribute='tagged_instances') | list }}"
Run Code Online (Sandbox Code Playgroud)

返回:

[ 
  [ { "private_ip": "ip1", "public_dns_name": "dns1" } , { ... }],
  [ { ... }, { ... } ]
]
Run Code Online (Sandbox Code Playgroud)

但你怎么会把它变成:

[
  { "private_ip": "ip1", "public_dns_name": "dns1" },
  { ... },
  { ... }, 
  { ... }
]
Run Code Online (Sandbox Code Playgroud)

'servers'注册的var看起来像:

"servers": {
    "changed": …
Run Code Online (Sandbox Code Playgroud)

jinja2 ansible ansible-playbook

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

Python Flask从变量渲染文本,如render_template

我知道烧瓶的功能render_template.我必须给出模板的文件名.但现在我想渲染一个模板的字符串(即模板的内容).那讲得通.但我现在不想解释原因.如何简单地渲染模板的文本?

python python-2.x jinja2 flask

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

Flask动态数据更新,无需重新加载页面

我正在尝试创建类似Google Suggest Tool的内容(通过建议api http://suggestqueries.google.com/complete/search?output=toolbar&hl=ru&q=query)

我正在监听输入变化,并发送数据去GET:

$("#search_form_input").keyup(function(){
var some_var = $(this).val();
   $.ajax({
      url: "",
      type: "get", //send it through get method
      data:{jsdata: some_var},
      success: function(response) {

      },
      error: function(xhr) {
        //Do Something to handle error
      }
    });
Run Code Online (Sandbox Code Playgroud)

之后,我正在处理这些数据并将其发送到Google API并在Python中得到响应:

@app.route('/', methods=['GET', 'POST'])
def start_page_data():
    query_for_suggest = request.args.get('jsdata')

    if query_for_suggest == None:
        suggestions_list = ['',]
        pass
    else:
        suggestions_list = []
        r = requests.get('http://suggestqueries.google.com/complete/search?output=toolbar&hl=ru&q={}&gl=in'.format(query_for_suggest), 'lxml')
        soup = BeautifulSoup(r.content)
        suggestions = soup.find_all('suggestion')
        for suggestion in suggestions:
            suggestions_list.append(suggestion.attrs['data'])
        print(suggestions_list)
    return render_template('start_page.html', suggestions_list=suggestions_list)
Run Code Online (Sandbox Code Playgroud)

在Jinja尝试动态打印HTML:

        <label …
Run Code Online (Sandbox Code Playgroud)

javascript python jquery jinja2 flask

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