djqgrid
is a Django wrapper for jqGrid.
djqgrid
lets you define grids in a Django-familiar way, while taking care of most of the mundane Python-JavaScript bridge for you.
You can find the documents at ReadTheDocs.
Install with
pip install djqgrid
Add
djqgrid
to yourINSTALLED_APPS
.Reference the
jqGrid
andjQueryUI
JavaScript and CSS filesReference the script at
{% static "js/djqgrid_utils.js" %}
Add the
djqgrid
URLs tourls.py
:urlpatterns += patterns('', url(r^'grid_json/', include (djqgrid.urls))
class MyModel(models.Model): name = models.CharField(max_length=40) desc = models.CharField(max_length=100) url = models.URLField() height = models.IntField()
class MyGrid(Grid): model = MyModel name = TextColumn(title='Name', model_path='name') height = TextColumn(title='Height', model_path='height', align='right') desc = LinkColumn(title='Description', model_path='desc', url_builder=lambda m: m.url)
What we have here is a grid associated with MyModel
objects - each grid row represents one object. The grid has three columns:
- Name - a basic column containing
model.name
- Height - containing
model.height
, but right aligned - Description - containing a link - its text will be
model.desc
and the URL will bemodel.url
One thing to note is align='right'
- this property is passed directly to jqGrid in the column's colModel. Any property can be passed to jqGrid this way. For example TextColumn(title=..., model_path=..., editable=true)
creates an editable column.
The view:
define myview(request): grid = MyGrid() return render(request, 'my_template.html', { grid: grid })
The template:
{% load djqgrid %} <div id="grid-div"> {% jqgrid grid %} </div>
Now run the view. You should see a very nice grid that supports paging and sorting.