Substring in a Jinja2 template

jinja2 substring match
jinja template example
jinja2 map
jinja dictionary
jinja2 selectattr
jinja for loop index
jinja list comprehension
jinja2 boolean

When deploying with ansible, There's 1 specific case where I need to strip a string of a trailing -p substring.

The string somemachine-prod-p should become somemachine-prod only if the -p is at the end.

The substring function I saw I can use with Jinja does not fulfill my needs as I need to strip the end of the string, not the start.

Ideas?

Found it.

If anyone wants to know:

{% if name.endswith('-p') %}
{{ name[:-2] }}
{% else %}
{{ name }}
{% endif %}

Extract substring from string - Configuration, Substring in a Jinja2 template. substring, ansible, jinja2. asked by Moshe on 12:​46PM - 22 Jan 17 UTC. Here's a more complicated example: Templating (Jinja2) As already referenced in the variables section, Ansible uses Jinja2 templating to enable dynamic expressions and access to variables. Ansible greatly expands the number of filters and tests available, as well as adding a new plugin type: lookups. Please note that all templating happens on the Ansible controller before the task is sent and executed on the target machine.

There is a nicer "oneliner": {{ name | regex_replace('-p$','') }}.

Jinja2 substring match, String substring Function. See ` builtin filters `_ in the official Jinja2 template documentation. It may be omitted, in which case all characters after  python - sheet - jinja2 substring . How to profile a Jinja2 template? (2) The Flask app I am profiling spends a long time rendering its Jinja2 templates.

For simple substring ...

"{{var_name[start:end]}}"

where start is starting position (offset 0) and end is end position (offset 1) ... it seems!

The title of this question suggests just wanting to get a substring from a variable. And most other search results have similar titles but then give a specific response like splitting paths etc. This is for those of you that, like me, had trouble finding such a basic thing.

Template Designer Documentation, A Jinja template doesn't need to have a specific extension: .html , .xml , or any Return a copy of the value with all occurrences of a substring replaced with a  Stack Overflow for Teams is a private, secure spot for you and your coworkers to find and share information. Learn more Python Jinja2 Render HTML template in certain style from strings

Jinja2 templates and filters, You are here: Administration > Reference > Jinja2 templates and filters The first argument of the filter is the substring that should be replaced, the second is  Jinjais a template engine for Python. It is similar to the Django template engine. A template engine or template processor is a library designed to combine templates with a data model to produce documents. Template enginesare often used to generate large amounts of emails, in source codepreprocessing, or producing dynamic HTML pages.

Jinja2 filters, The variable value will be used as is, but the template evaluation will raise an error if it is undefined. Defaulting Undefined Variables¶. Jinja2 provides a useful '​  Templating With Jinja2 in Flask: Advanced. Jinja2 is a template engine written in pure Python. It provides a Django -inspired non-XML syntax but supports inline expressions and an optional sandboxed environment. It is small but fast, apart from being an easy-to-use standalone template engine.

Documentation: substring missing · Issue #862 · pallets/jinja · GitHub, In the documentation explanation of substring is missing. So for example, one can do something like this: {{ foo[:3] }} To get the first three  Template Designer Documentation¶ This document describes the syntax and semantics of the template engine and will be most useful as reference to those creating Jinja templates. As the template engine is very flexible, the configuration from the application can be slightly different from the code presented here in terms of delimiters and behavior of undefined values.

Comments
  • I know this is an old post, but just wanted to say this helped tremendously this afternoon. Thanks for sharing.
  • This only works with a suitable filter registered, because regex_replace is not a default filter. This is the case in ansible, which provides extra filters. If you want to you can also omit the last argument: {{ name | regex_replace('-p$').
  • Sorry for the above comment. I just realised, that this is actually and ansible specific question. I just came here by searching for jinja2.