pythondjangodjango-templates

Replacing a character in Django template


I want to change & to and in the my page's meta description.

This is what I tried

{% if '&' in dj.name %}
    {{ dj.name.replace('&', 'and') }}
{% else %}
    {{ dj.name }}
{% endif %}

This doesn't work. It still shows as &


Solution

  • dj.name.replace('&', 'and') You can not invoke method with arguments.You need to write a custom filter.

    Official guide is here:

    https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

    Ok, here is my example, say, in an app named 'questions', I want to write a filter to_and which replaces '&' to 'and' in a string.

    In /project_name/questions/templatetags, create a blank __init__.py, and to_and.py which goes like:

    from django import template
    
    register = template.Library()
    
    @register.filter
    def to_and(value):
        return value.replace("&","and")
    

    In template , use:

    {% load to_and %}
    

    then you can enjoy:

    {{ string|to_and }}
    

    Note, the directory name templatetags and file name to_and.py can not be other names.