Display django- pandas dataframe in django template

I am trying to use django with pandas to analyze data. There seems to be no simple walkthrough on this. Everything I've seen on the Internet just explains how to write code in the django views.py file, but none of them show how to display the final product in a browser.

Here is the code in my view.py

def index2(request): qs = Product.objects.all() df = read_frame(qs) html= df.to_html return HttpResponse(html) 

but it does not work. Any detailed help would be greatly appreciated. Please just don’t show me any documentation. In fact, most of the django documentation is not written in plain simple English - this is even more confusing for some of us. Thanks.

+6
source share
1 answer

Here is a minimal but elegant solution using Django_Pandas and an extended Bootstrap table ( https://github.com/wenzhixin/bootstrap-table )

The finesse comes from the ability to export the Pandas DataFrame to JSON, and for the Bootstrap script, to use this JSON content.

The HTML table is written for us, we don’t need to worry about it (see below, where we simply include the "table" tag without writing the lines themselves or even the for loop.) And this is interactive. And Bootstrap makes it beautiful.

: Bootstrap, jQuery, Django_Pandas, wenzhixin / bootstrap-table

models.py

 from django.db import models from django_pandas.managers import DataFrameManager class Product(models.Model): product_name=models.TextField() objects = models.Manager() pdobjects = DataFrameManager() # Pandas-Enabled Manager 

views.py

 from models import Product def ProductView(request): qs = Product.pdobjects.all() # Use the Pandas Manager df = qs.to_dataframe() template = 'product.html' #Format the column headers for the Bootstrap table, they're just a list of field names, #duplicated and turned into dicts like this: {'field': 'foo', 'title: 'foo'} columns = [{'field': f, 'title': f} for f in Product._Meta.fields] #Write the DataFrame to JSON (as easy as can be) json = df.to_json(orient='records') # output just the records (no fieldnames) as a collection of tuples #Proceed to create your context object containing the columns and the data context = { 'data': json, 'columns': columns } #And render it! return render(request, template, context) 

product.html

 <script src='/path/to/bootstrap.js'> <script src='/path/to/jquery.js'> <script src='/path/to/bootstrap-table.js'> <script src='/path/to/pandas_bootstrap_table.js'> <table id='datatable'></table> <!-- Yep, all you need is a properly identified but otherwise empty, table tag! --> 

pandas_bootstrap_table.js

 $(function() { $('#datatable')({ striped: true, pagination: true, showColumns: true, showToggle: true, showExport: true, sortable: true, paginationVAlign: 'both', pageSize: 25, pageList: [10, 25, 50, 100, 'ALL'], columns: {{ columns|safe }}, // here is where we use the column content from our Django View data: {{ data|safe }}, // here is where we use the data content from our Django View. we escape the content with the safe tag so the raw JSON isn't shown. }); }); 
+7
source

All Articles