skip to navigation
skip to content

django-progressbarupload 0.1.7

Progress bar upload for Django


[![Build Status](](

django-progressbarupload is a simple Django application that instantiates an HTML5 upload progress bar when the user submits a form with files (a form having basically FileField(s) and/or ImageField(s), and an enctype="multipart/form-data").


The following users have contributed:
* [Iago Suárez](
* [Andrew Brookins](
* [Callan Bryant](
* [Mathieu Comandon](

Quick start

Requirements :
* Django 1.7.4 or above.
* Python 2.7 or 3.4
* django.contrib.staticfiles app to serve static files

1. Install the app

pypi version

pip install django-progressbarupload

development version

pip install -e git+

2. Add progressbarupload to your INSTALLED_APPS in your settings

INSTALLED_APPS += ('progressbarupload', )

3. Add "progressbarupload.uploadhandler.ProgressBarUploadHandler" to your FILE_UPLOAD_HANDLERS setting


4. Include the progressbarupload URLconf in your project

(r'^progressbarupload/', include('progressbarupload.urls')),

5. In your settings file, if you don't want to include jquery with {% progress_bar_media %}, then set:

``` python


### ModelAdmin

Set the ```change_form_template``` and ```add_form_template``` attributes in your ModelAdmin to 'progressbarupload/change_form.html'.

from django.contrib import admin
from my_awesome_app.models import MyAwesomeModelWithFiles

class MyAwesomeModelWithFiles(admin.ModelAdmin):
change_form_template = 'progressbarupload/change_form.html'
add_form_template = 'progressbarupload/change_form.html', UploadFileModelAdmin)


This app includes a demo app, just go inside testapp dir and run

python migrate
python runserver

then go to or or

### Form and ModelForm

To use a progress bar in your custom ModelForm or Form, load the progress_bar template tag set ```{% load progress_bar %}``` in the template, and use the following template tags ```{% progress_bar_media %}``` between <head> tags to load javascript files and ```{% progress_bar %}``` where you and to display the progress bar.

{% load progress_bar %}

{% progress_bar_media %}

<form enctype="multipart/form-data" method="post" action=".">
{% csrf_token %}
{{ form }}
{% progress_bar %}
<input type="submit"/>

Further information

Make sure your browser renders HTML5 ```<progress>``` tag and uses data-* attribute (IE>10, FF>6.0, Chrome>8.0, Opera>11.0).

As Django has a unique TemporaryFileUploadHandler for all request.FILES. For ModelAdmin, if you have related models, using TabularInline, the upload progress will also be shown in the admin add/change form as soon as you use the right templates in your ModelAdmin (and even if your ModelAdmin doesn't contain any file upload).

Custom TemporaryFileUploadHandler copied from

Launch tests

It assumes you have installed virtualenvwrapper (

# get the application code
git clone
cd django-progressbarupload
# create a virtualenv
mkvirtualenv progressbarupload
add2virtualenv .
# install requirements for tests and django (set the django version you want to use)
pip install -r requirements/tests.txt django==1.7.4
# launch tests test --settings=progressbarupload.test_settings progressbarupload

New: Use transparently with uwsgi/nginx
The combination of uwsgi and nginx prevent django-progressbarupload from
working because nginx buffers the entire POST request until it is complete
before sending it to uwsgi/django. This means your application runs faster as
uwsgi threads are less tied up, but it also makes it impossible to view to
progress Django side.

Whilst you could use XMLHttpRequest 2.0 to get the progress client-side, you
may not have the luxury if you need to support older browsers. This is where
[RFC1867][2] comes in. By configuring the [nginx-upload-progress-module][1] in
the following way, it is possible to transparently support the native method as
well as the plugin:

upload_progress uploadp 1m;
# JSON document rather than JSONP callback, pls
location ^ upload/url/pattern/
track_uploads uploadp 30s {
location ^~ /progressbarupload/upload_progress {
report_uploads uploadp;


nginx-upload-progress-module is available on ubuntu in the `nginx-extras` package.


File Type Py Version Uploaded on Size
django-progressbarupload-0.1.7.tar.gz (md5) Source 2016-11-04 21KB
django_progressbarupload-0.1.7-py2.py3-none-any.whl (md5) Python Wheel py2.py3 2016-11-04 12KB