add json_script template tag (from django 2.1)

This commit is contained in:
Frédéric Péters 2018-08-15 21:54:28 +02:00
parent 079ecde4f6
commit d67b19fa65
1 changed files with 18 additions and 0 deletions

View File

@ -17,6 +17,7 @@
from collections import OrderedDict
import datetime
import json
import math
import operator
import random
@ -27,8 +28,10 @@ from requests import RequestException
from django import template
from django.conf import settings
from django.core.serializers.json import DjangoJSONEncoder
from django.utils.dateparse import parse_datetime
from django.utils.http import quote
from django.utils.html import format_html
from django.utils.text import slugify
from django.utils.timezone import is_naive, make_aware
from django.utils.safestring import mark_safe
@ -674,3 +677,18 @@ def gnm_airquality_map(context):
map_cell.max_zoom = '19'
context.push(map_cell.get_cell_extra_context({}))
return context
_json_script_escapes = {
ord('>'): '\\u003E',
ord('<'): '\\u003C',
ord('&'): '\\u0026',
}
@register.filter(is_safe=True)
def json_script(value, element_id):
json_str = json.dumps(value, cls=DjangoJSONEncoder)
json_str = json_str.replace('>', '\\u003E').replace('<', '\\u003C').replace('&', '\\u0026')
return format_html(
'<script id="{}" type="application/json">{}</script>',
element_id, mark_safe(json_str)
)