Skip to content
Enables pretty JSON viewer in Django forms, admin, or templates
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
prettyjson
tests Adds option for initial rendering May 20, 2017
.editorconfig First commit May 28, 2016
.gitignore First commit May 28, 2016
.python-version update dev requirements Aug 7, 2018
.travis.yml update Travis config May 28, 2016
AUTHORS.rst First commit May 28, 2016
CONTRIBUTING.rst update publishing procedure Apr 13, 2018
HISTORY.rst Bump version: 0.4.0 → 0.4.1 Aug 7, 2018
LICENSE First commit May 28, 2016
MANIFEST.in Fix README.md in manifest file Jul 1, 2016
Makefile First commit May 28, 2016
Pipfile update dev requirements Aug 7, 2018
Pipfile.lock update dev requirements Aug 7, 2018
README.md Fix link in README.md. (#18) Jul 22, 2018
requirements-test.txt update Travis config May 28, 2016
requirements.txt require six, closes #7 May 23, 2017
requirements_dev.txt First commit May 28, 2016
runtests.py First commit May 28, 2016
setup.cfg Bump version: 0.4.0 → 0.4.1 Aug 7, 2018
setup.py require six, closes #7 May 23, 2017
tox.ini First commit May 28, 2016

README.md

django-prettyjson

PyPi Version Build Status

Enables pretty JSON viewer in Django forms, admin, or templates. The viewer is adapted from jQuery JSONView. It is compatible with almost anything: JSON stored in a string, a jsonfield (using django.contrib.postgres or django-jsonfield), or any python object that can be serialized to JSON (using standardjson).

Demo

See http://kevinmickey.github.io/django-prettyjson

Installation

At the command line:

pip install django-prettyjson

Configuration

Add 'prettyjson' to INSTALLED_APPS in settings.py:

INSTALLED_APPS = (
  ...,
  'prettyjson',
)

Usage

In a form or admin of a model, enable a pretty JSON viewer for a particular field:

from prettyjson import PrettyJSONWidget

class JsonForm(forms.ModelForm):
  class Meta:
    model = Test
    fields = '__all__'
    widgets = {
      'myjsonfield': PrettyJSONWidget(),
    }

class JsonAdmin(admin.ModelAdmin):
  form = JsonForm

Enable pretty JSON viewer for every JSONField of a model:

from django.contrib.postgres.fields import JSONField

class JsonAdmin(admin.ModelAdmin):
  formfield_overrides = {
    JSONField: {'widget': PrettyJSONWidget }
  }

In templates, you can also enable a pretty JSON viewer. Use the prettyjson template tag with a string JSON or with objects (dicts, QuerySets, etc.) that can be serialized to a JSON. Note that the template tag must be loaded using {% load prettyjson %}. It also has CSS and JS that must be included using {% prettyjson_setup %}.

{% extends "base.html" %}

{% load prettyjson %}

{% block header %}
  {{ block.super }}
  {% prettyjson_setup %}
{% endblock %}

{% block content %}
  {% prettyjson myqueryset %}
  {% prettyjson mydict %}
  {% prettyjson '{"hey": "guy","anumber": 243,"anobject": {"whoa": "nuts","anarray": [1,2,"thr<h1>ee"], "more":"stuff"},"awesome": true,"bogus": false,"meaning": null, "japanese":"明日がある。", "link": "http://jsonview.com", "notLink": "http://jsonview.com is great"}' %}
  {% prettyjson '{}' %}
{% endblock %}

The setup includes jQuery, loaded as django.jQuery to avoid namespace conflict. If your page already includes jQuery, use {% prettyjson_setup jquery=False %} to avoid loading jQuery a second time.

Configure Rendering

By default the jsonwidget will render as a raw string with a button to click to change it to parsed json. For it to render as parsed json initially, you can pass an argument:

class JsonAdmin(admin.ModelAdmin):
  formfield_overrides = {
    JSONField: {'widget': PrettyJSONWidget(attrs={'initial': 'parsed'})}
  }

Or, in a template tag:

{% prettyjson mydict initial='parsed' %}

Running Tests

In development.

source <YOURVIRTUALENV>/bin/activate
(myenv) $ pip install -r requirements-test.txt
(myenv) $ python runtests.py

Credits

Dependencies, parts of code, and/or sources of inspiration:

Tools used in developing, testing, and/or rendering this package:

You can’t perform that action at this time.