Two strings can be concatenated in Python by simply using the '+' operator between them. More than two strings can be concatenated using '+' operator.
The & operator is recommended for string concatenation because it is defined exclusively for strings and reduces your chances of generating an unintended conversion.
A Django template is a text document or a Python string marked-up using the Django template language. Some constructs are recognized and interpreted by the template engine. The main ones are variables and tags. A template is rendered with a context.
Use with:
{% with "shop/"|add:shop_name|add:"/base.html" as template %}
{% include template %}
{% endwith %}
Don't use add
for strings, you should define a custom tag like this :
Create a file : <appname>\templatetags\<appname>_extras.py
from django import template
register = template.Library()
@register.filter
def addstr(arg1, arg2):
"""concatenate arg1 & arg2"""
return str(arg1) + str(arg2)
and then use it as @Steven says
{% load <appname>_extras %}
{% with "shop/"|addstr:shop_name|addstr:"/base.html" as template %}
{% include template %}
{% endwith %}
Reason for avoiding add
:
According to the docs
This filter will first try to coerce both values to integers... Strings that can be coerced to integers will be summed, not concatenated...
If both variables happen to be integers, the result would be unexpected.
I have changed the folder hierarchy
/shop/shop_name/base.html To /shop_name/shop/base.html
and then below would work.
{% extends shop_name|add:"/shop/base.html"%}
Now its able to extend the base.html page.
Refer to Concatenating Strings in Django Templates:
For earlier versions of Django:
{{ "Mary had a little"|stringformat:"s lamb." }}
"Mary had a little lamb."
Else:
{{ "Mary had a little"|add:" lamb." }}
"Mary had a little lamb."
You do not need to write a custom tag. Just evaluate the vars next to each other.
"{{ shop name }}{{ other_path_var}}"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With