@register.to_end_tag
def ga_editable(parsed, context, token):

    def parse_field(field):
        field = field.split(".")
        obj = context.get(field.pop(0), None)
        attr = field.pop()
        while field:
            obj = getattr(obj, field.pop(0))
        return obj, attr

    fields = [parse_field(f) for f in token.split_contents()[1:]]
    if fields:
        fields = [f for f in fields if len(f) == 2 and f[0] is fields[0][0]]
    if not parsed.strip():
        try:
            parsed = "".join([str(getattr(*field)) for field in fields])
        except AttributeError:
            pass

    if settings.INLINE_EDITING_ENABLED and fields and "request" in context:
        obj = fields[0][0]
        if isinstance(obj, Model) and is_editable(obj, context["request"]):
            field_names = ",".join([f[1] for f in fields])
            context["editable_form"] = get_edit_form(obj, field_names)
            context["original"] = parsed
            t = get_template("includes/ga_editable_form.html")
            return t.render(Context(context))
    return parsed
convert javascript objects like true, none, NaN etc. to
dataset/ETHPy150Open hydroshare/hydroshare2/ga_resources/templatetags/geoanalytics_tags.py/ga_editable--crossover with--dataset/ETHPy150Open vsjha18/nsetools/utils.py/js_adaptor