我有两个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()也是我正在寻找的.)
在使用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对象添加一个条目.
我已经提到了以下和其他网络资源:
假设我将字典传递给我的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) 我正在进一步挖掘 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) 我有一个前端,它通过一个简单的宏生成引导程序表单:
{% 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"具有作为验证器的字段添加前端验证 …