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 &
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.
More useful:
from django import template
register = template.Library()
@register.filter
def replace(value, arg):
"""
Replacing filter
Use `{{ "aaa"|replace:"a|b" }}`
"""
if len(arg.split('|')) != 2:
return value
what, to = arg.split('|')
return value.replace(what, to)
The documentation says thus:
Because Django intentionally limits the amount of logic processing available in the template language, it is not possible to pass arguments to method calls accessed from within templates. Data should be calculated in views, then passed to templates for display.
You will have to edit dj.name
beforehand.
Edit: looks like Pythoner knows a better way: registering a custom filter. Upvote him ;)
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