When I look at the django source code, I see that `%` signs are escaped to `%%` during extraction [1] [2] then replaced by `%` during the rendering [3]. There is no such replacements during the extraction, but Django will still want to replace `%%` by `%`on rendering. If you confirm my analysis, I can create a PR to fix the issue [1] https://github.com/django/django/blob/stable/1.11.x/django/utils/translation/template.py#L182 [2] https://github.com/django/django/blob/stable/1.11.x/django/utils/translation/template.py#L145 [3] https://github.com/django/django/blob/master/django/templatetags/i18n.py#L86