This document describes changes between past releases. For information about future releases, check milestones [1] and Vision.

1.7 (2015-06-13)

  • Bugfix #87 - Filenames with commas are now supported. In download responses, filename is now surrounded by double quotes.
  • Bugfix #97 - HTTPFile proxies bytes as BytesIteratorIO (was undecoded urllib3 file object). StringIteratorIO has been split into TextIteratorIO and BytesIteratorIO. StringIteratorIO is deprecated but kept for backward compatibility as an alias for TextIteratorIO.
  • Bugfix #92 - Run demo using make demo runserver (was broken).
  • Feature #99 - Tox runs project’s tests with Python 2.7, 3.3 and 3.4, and with Django 1.5 to 1.8.
  • Refactoring #98 - Refreshed development environment: packaging, Tox and Sphinx.

1.6 (2014-03-03)

Python 3 support, development environment refactoring.

  • Feature #46: introduced support for Python>=3.3.
  • Feature #80: added documentation about “how to serve a file inline VS how to serve a file as attachment”. Improved documentation of views’ base options inherited from DownloadMixin.
  • Feature #74: the Makefile in project’s repository no longer creates a virtualenv. Developers setup the environment as they like, i.e. using virtualenv, virtualenvwrapper or whatever. Tests are run with tox.

1.5 (2013-11-29)

X-Sendfile support and helpers to migrate for django-sendfile.

  • Feature #2 - Introduced support of Lighttpd’s x-Sendfile.
  • Feature #36 - Introduced support of Apache’s mod_xsendfile.
  • Feature #41 - django_downloadview.sendfile is a port of django-sendfile‘s sendfile function. The documentation contains notes about migrating from django-sendfile to django-downloadview.

1.4 (2013-11-24)

Bugfixes and documentation features.

  • Bugfix #43 - ObjectDownloadView returns HTTP 404 if model instance’s file field is empty (was HTTP 500).
  • Bugfix #7 - Special characters in file names (Content-Disposition header) are urlencoded. An US-ASCII fallback is also provided.
  • Feature #10 - django-downloadview is registered on
  • Feature #65 - INSTALL documentation shows “known good set” (KGS) of versions, i.e. versions that have been used in test environment.

1.3 (2013-11-08)

Big refactoring around middleware configuration, API readability and documentation.

  • Bugfix #57 - PathDownloadView opens files in binary mode (was text mode).

  • Bugfix #48 - Fixed basename assertion in assert_download_response: checks Content-Disposition header.

  • Bugfix #49 - Fixed content assertion in assert_download_response: checks only response’s streaming_content attribute.

  • Bugfix #60 - VirtualFile.__iter__ uses force_bytes() to support both “text-mode” and “binary-mode” content. See

  • Feature #50 - Introduced django_downloadview.DownloadDispatcherMiddleware that iterates over a list of configurable download middlewares. Allows to plug several download middlewares with different configurations.

    This middleware is mostly dedicated to internal usage. It is used by SmartDownloadMiddleware described below.

  • Feature #42 - Documentation shows how to stream generated content (yield). Introduced django_downloadview.StringIteratorIO.

  • Refactoring #51 - Dropped support of Python 2.6

  • Refactoring #25 - Introduced django_downloadview.SmartDownloadMiddleware which allows to setup multiple optimization rules for one backend.

    Deprecates the following settings related to previous single-and-global middleware:

  • Refactoring #52 - ObjectDownloadView now inherits from SingleObjectMixin and BaseDownloadView (was DownloadMixin and BaseDetailView). Simplified DownloadMixin.render_to_response() signature.

  • Refactoring #40 - Documentation includes examples from demo project.

  • Refactoring #39 - Documentation focuses on usage, rather than API. Improved narrative documentation.

  • Refactoring #53 - Added base classes in django_downloadview.middlewares, such as ProxiedDownloadMiddleware.

  • Refactoring #54 - Expose most Python API directly in django_downloadview package. Simplifies import statements in client applications. Splitted nginx module in a package.

  • Added unit tests, improved code coverage.

1.2 (2013-05-28)

Bugfixes and documentation improvements.

  • Bugfix #26 - Prevented computation of virtual file’s size, unless the file wrapper implements was_modified_since() method.
  • Bugfix #34 - Improved support of files that do not implement modification time.
  • Bugfix #35 - Fixed README conversion from reStructuredText to HTML (PyPI).

1.1 (2013-04-11)

Various improvements. Contains backward incompatible changes.

  • Added HTTPDownloadView to proxy to arbitrary URL.
  • Added VirtualDownloadView to support files living in memory.
  • Using StreamingHttpResponse introduced with Django 1.5. Makes Django 1.5 a requirement!
  • Added django_downloadview.test.assert_download_response utility.
  • Download views and response now use file wrappers. Most logic around file attributes, formerly in views, moved to wrappers.
  • Replaced DownloadView by PathDownloadView and StorageDownloadView. Use the right one depending on the use case.

1.0 (2012-12-04)

  • Introduced optimizations for Nginx X-Accel: a middleware and a decorator
  • Introduced generic views: DownloadView and ObjectDownloadView
  • Initialized project

Notes & references