English 中文(简体)
String concatenation in Jinja
原标题:

I just want to loop through an existing list and make a comma delimited string out of it.
Something like this: my_string = stuff, stuff, stuff, stuff

I already know about loop.last, I just need to know how to make the third line in my code below WORK.

{% set my_string =    %}
{% for stuff in stuffs %}
{% set my_string = my_string + stuff +  ,  %}
{% endfor%}
最佳回答

If stuffs is a list of strings, just this would work:

{{ stuffs|join(", ") }}

See join filter documentation, as well as filters in general documentation.

p.s.

More reader friendly way

{{ my ~  ,   ~ string }}
问题回答

You can use + if you know all the values are strings. Jinja also provides the ~ operator, which will ensure all values are converted to string first.

{% set my_string = my_string ~ stuff ~  ,  %}

My bad, in trying to simplify it, I went too far, actually stuffs is a record of all kinds of info, I just want the id in it.

stuffs = [[123, first, last], [456, first, last]]

I want my_sting to be

my_sting =  123, 456 

My original code should have looked like this:

{% set my_string =    %}
{% for stuff in stuffs %}
{% set my_string = my_string + stuff.id +  ,  %}
{% endfor%}

Thinking about it, stuffs is probably a dictionary, but you get the gist.

Yes I found the join filter, and was going to approach it like this:

 {% set my_string = [] %}
 {% for stuff in stuffs %}
 {% do my_string.append(stuff.id) %}
 {% endfor%}
 {%  my_string|join( ,  ) %}

But the append doesn t work without importing the extensions to do it, and reading that documentation gave me a headache. It doesn t explicitly say where to import it from or even where you would put the import statement, so I figured finding a way to concat would be the lesser of the two evils.

If you can t just use filter join but need to perform some operations on the array s entry:

{% for entry in array %}
User {{ entry.attribute1 }} has id {{ entry.attribute2 }}
{% if not loop.last %}, {% endif %}
{% endfor %}

Just another hack can be like this.

I have Array of strings which I need to concatenate. So I added that array into dictionary and then used it inside for loop which worked.

{% set dict1 = { e :  } %}
{% for i in list1 %}
{% if dict1.update({ e :dict1.e+":"+i+"/"+i}) %} {% endif %}
{% endfor %}
{% set layer_string = dict1[ e ] %}

You have to use the join method to concatenate strings and variables. Here is an example of how to do that.

{% set module = "XYZ" %}
{% set jarfile = [module,  - , version,  -jar-with-dependencies.jar ]|join %}




相关问题
Simple JAVA: Password Verifier problem

I have a simple problem that says: A password for xyz corporation is supposed to be 6 characters long and made up of a combination of letters and digits. Write a program fragment to read in a string ...

Case insensitive comparison of strings in shell script

The == operator is used to compare two strings in shell script. However, I want to compare two strings ignoring case, how can it be done? Is there any standard command for this?

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

String initialization with pair of iterators

I m trying to initialize string with iterators and something like this works: ifstream fin("tmp.txt"); istream_iterator<char> in_i(fin), eos; //here eos is 1 over the end string s(in_i, ...

break a string in parts

I have a string "pc1|pc2|pc3|" I want to get each word on different line like: pc1 pc2 pc3 I need to do this in C#... any suggestions??

Quick padding of a string in Delphi

I was trying to speed up a certain routine in an application, and my profiler, AQTime, identified one method in particular as a bottleneck. The method has been with us for years, and is part of a "...

热门标签