相关疑难解决方法(0)

如何在单个表达式中合并两个词典?

我有两个Python字典,我想编写一个返回这两个字典的表达式,合并.update()如果它返回结果而不是就地修改dict,那么该方法将是我需要的.

>>> x = {'a': 1, 'b': 2}
>>> y = {'b': 10, 'c': 11}
>>> z = x.update(y)
>>> print(z)
None
>>> x
{'a': 1, 'b': 10, 'c': 11}
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得最终合并的词典z,不是x吗?

(要清楚的是,最后一次胜利的冲突处理dict.update()也是我正在寻找的.)

python merge dictionary

4349
推荐指数
41
解决办法
168万
查看次数

如何在使用jinja2时将新条目添加到字典对象中?

在使用jinja2模板时,我无法追加向字典对象添加新条目.

例如,这里我使用的是jinja2模板,我创建了一个数据变量,它是一个字典.在检查了一些if条件之后我想要将location属性附加到数据对象,例如

{%- set data = {
                  'name' : node.Name,
                  'id' : node.id,
               }
-%}

{% if node.location !="" %}
    data.append({'location': node.location}) 
{% endif %}
Run Code Online (Sandbox Code Playgroud)

但是我找不到实现此目的的方法并且得到UndefinedError:

jinja2.exceptions.UndefinedError: 'dict object' has no attribute 'append'
Run Code Online (Sandbox Code Playgroud)

有没有人遇到这个问题或者可以提供解决这个问题的参考?

我在网上搜索但找不到解决方案,即如何在Jinja中为dict对象添加一个条目.

我已经提到了以下和其他网络资源:

  1. http://cewing.github.io/training.codefellows/assignments/day22/jinja2_walkthrough.html
  2. 在Jinja2中,将所有键设置为字典值的最简单方法是什么?
  3. https://github.com/saltstack/salt/issues/27494

python dictionary jinja2

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

修改jinja2中的字典属性

假设我将字典传递给我的jinja2模板.
在视图中我有类似的东西

d = {}
#set other template stuff into d
get_params['cri'] = 'time'
get_params['order'] = 'asc'
d['get_params'] = get_params
return d
Run Code Online (Sandbox Code Playgroud)

在模板中,我需要更改get_params的键值.合乎逻辑的事情

{% set get_params.cri='src' %}
Run Code Online (Sandbox Code Playgroud)

失败并出错

TemplateSyntaxError: expected token '=', got '.'
Run Code Online (Sandbox Code Playgroud)

我的问题是如何修改传递给jinja2中字典的值

(这个问题已在这里提出,但我觉得答案令人困惑,它只能回答合并部分)

答案编辑:

Jinja2提供'do'扩展.要将该扩展添加到金字塔,请在__init__.py文件中执行以下操作

#This line is alreadythere
config.include('pyramid_jinja2')
#Add this line
config.add_jinja2_extension('jinja2.ext.do')
Run Code Online (Sandbox Code Playgroud)

在模板中

{% do get_params.update({'cri':'src'}) %}
Run Code Online (Sandbox Code Playgroud)

python dictionary jinja2 pyramid

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

Ansible 获取其他组变量

我正在进一步挖掘 Ansible 功能,并且希望以一种漂亮的方式实现 VIP 的概念。为此,我在group_vars库存中实现了此变量:

group_vars/firstcluster:

vips:
  - name: cluster1_vip
    ip: 1.2.3.4
  - name: cluster1.othervip
    ip: 1.2.3.5
Run Code Online (Sandbox Code Playgroud)

group_vars/第二个集群:

vips:
  - name: cluster2_vip
    ip: 1.2.4.4
  - name: cluster2.othervip
    ip: 1.2.4.5
Run Code Online (Sandbox Code Playgroud)

并在库存中:

[firstcluster]
node10
node11

[secondcluster]
node20
node21
Run Code Online (Sandbox Code Playgroud)

我的问题:如果我想设置一个 DNS 服务器来收集所有 VIP 和相关名称(没有美观的冗余),我该如何进行?简而言之:是否有可能获取所有组变量,尽管有下面的主机?

喜欢:

{% for group in <THEMAGICVAR> %}
{% for vip in group.vips %}
{{ vip.name }}      IN A     {{ vip.ip }}
{% end for %}
{% end for %}
Run Code Online (Sandbox Code Playgroud)

variables jinja2 ansible

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

Jinja/Wtform aria-required 验证

我有一个前端,它通过一个简单的宏生成引导程序表单:

{% macro render_field(field, class_='', label_visible=true) -%}

<div class="form-group {% if field.errors %} has-error {% endif %}">
    {% if (field.type != 'HiddenField' and field.type !='CSRFTokenField') and label_visible %}
        <label for="{{ field.id }}" class="control-label">{{ field.label }}</label>
    {% endif %}
    {{ field(class_='form-control', **kwargs) }}
    {% if field.errors %}
        {% for e in field.errors %}
            <p class="help-block">{{ e }}</p>
        {% endfor %}
    {% endif %}
</div>

{%- endmacro %}
Run Code Online (Sandbox Code Playgroud)

我使用的 wtform 如下所示:

class CommentForm(Form):
    comment = TextAreaField(validators=[DataRequired('Please enter your comment.')])
Run Code Online (Sandbox Code Playgroud)

是否可以为aria-required="true"具有作为验证器的字段添加前端验证 …

jinja2 wtforms flask-wtforms twitter-bootstrap-3

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