How to See if a String Contains Another String in Django Template


This is my code in a template.

{% if 'index.html' in  "{{ request.build_absolute_uri  }}" %} 
{% else %}      
{% endif %}

Now my url value currently is ""

Even though "index.html" is there in the string it still prints bye.

When I run the same code in a python shell it works. Not sure what the mistake is.

Asked By: curiousguy



Try removing the extra {{...}} tags and the "..." quotes around request.build_absolute_uri, it worked for me.

Since you are already within an {% if %} tag, there is no need to surround request.build_absolute_uri with {{...}} tags.

{% if 'index.html' in request.build_absolute_uri %}
{% else %}
{% endif %}

Because of the quotes you are literally searching the string "{{ request.build_absolute_uri }}" and not the evaluated Django tag you intended.

Answered By: Farmer Joe

Maybe too late but here is a lightweight version :

{{ 'hello 'if 'index.html' in request.build_absolute_uri else 'bye' }}

This can be tested with Jinja:

>>> from jinja2 import Template
>>> t = Template("{{ 'hello 'if 'index.html' in request.build_absolute_uri else 'bye' }}")
>>> request = {}
>>> request['build_absolute_uri']='...index.html...'
>>> t.render(request=request)
'hello '
>>> request['build_absolute_uri']='something else...'
>>> t.render(request=request)
Answered By: chenchuk

I am adding the negative option of "not contains":

{% if 'index.html' not in request.build_absolute_uri %}
{% else %}
{% endif %}


{{ 'hello 'if 'index.html' not in request.build_absolute_uri else 'bye' }}

Answered By: Yakir GIladi Edry
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.