使用过滤器从字典构建URL字符串

时间:2018-11-20 10:24:06

标签: string ansible jinja2

在Ansible中,我试图从字典开始构建URL字符串。

这是来源字典:

query_string:
   UserName: myname
   Notes: abcd
   GenericField1: foo

这是我想要获得的:

UserName=myname&Notes=abcd&GenericField1=foo

我尝试了几种Jinja文件管理器组合(urlencode,flatten等),但我无法达到目标。 有人有建议吗?

4 个答案:

答案 0 :(得分:0)

这是您要查找的代码吗?

- set_fact:
    my_url: >
      UserName={{ query_string.UserName -}}
      &Notes={{ query_string.Notes -}}
      &GenericField1={{ query_string.GenericField1 -}}

答案 1 :(得分:0)

如果query_string词典具有更多属性,则此代码为您提供了根据需要使用更多字段的灵活性

- name: build the url
  set_fact:
    myurl: "{{ myurl | default('') + item.key + '=' + item.value + '&' | regex_replace('\\&$', '') }}"
  loop: "{{ query_string|dict2items }}"

答案 2 :(得分:0)

此解决方案运行正常:

  - name: Create query string from input params
    set_fact:
      URL_params: "{{ URL_params }}{{ (index > 0)|ternary('&','') }}{{ item.key }}={{ item.value | urlencode }}"
    loop: "{{  query_string | dict2items }}"
    loop_control:
      index_var: index

答案 3 :(得分:0)

与@EBAH几乎相同:

- set_fact:
    url_str: "{{ (url_str | default('')) + ('&' if (index > 0) else '') + (item.key+'='+item.value| urlencode) }}"
  loop: "{{ query_string | dict2items }}"
  loop_control:
    index_var: index