Django FileBrowser Documentation
Django FileBrowser Documentation
Release 3.5.3
Patrick Kranzlmueller
2 API 11
2.1 API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4 Admin Interface 23
4.1 Admin Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5 Image Versions 29
5.1 Versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
6 Help 33
6.1 Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
6.2 Changelog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
7 Main Features 39
8 Code 41
9 Discussion 43
i
ii
Django FileBrowser Documentation, Release 3.5.3
Note: FileBrowser 3.5.3 requires Django 1.4 or 1.5 or 1.6 and Grappelli 2.4 or 2.5.
Contents 1
Django FileBrowser Documentation, Release 3.5.3
2 Contents
CHAPTER 1
For using the FileBrowser, Django needs to be installed and an Admin Site has to be activated.
1.1.1 Requirements
1.1.2 Installation
urlpatterns = patterns(’’,
(r’^admin/filebrowser/’, include(site.urls)),
(r’^grappelli/’, include(’grappelli.urls’)),
(r’^admin/’, include(admin.site.urls)),
)
Collect the static files (please refer to the Staticfiles Documentation for more information):
python manage.py collectstatic
3
Django FileBrowser Documentation, Release 3.5.3
1.1.3 Settings
Note: You need to add a folder “uploads” within site.storage.location when using the default settings.
And we strongly recommend to define a VERSIONS_BASEDIR.
1.1.4 Testing
Warning: Please note that the tests will copy files to your filesystem.
Goto /admin/filebrowser/browse/ and check if everything looks/works as expected. If you’re having problems, see
Troubleshooting.
1.2 Settings
There are some settings in order to customize the FileBrowser. Nonetheless, you should be able to start with the default
settings.
All settings can be defined in your projects settings-file. In that case, you have to use the prefix FILEBROWSER_ for
every setting (e.g. FILEBROWSER_EXTENSIONS instead of EXTENSIONS).
MEDIA_ROOT
Warning: Will be removed with version 3.6.0. Since 3.4, MEDIA_ROOT is defined with your storage engine.
The absolute path to the directory that holds the media-files you want to browse:
MEDIA_ROOT = getattr(settings, "FILEBROWSER_MEDIA_ROOT", settings.MEDIA_ROOT)
MEDIA_URL
Warning: Will be removed with version 3.6.0. Since 3.4, MEDIA_URL is defined with your storage engine.
Main FileBrowser Directory. Leave empty in order to browse all files and folders within a storage location:
DIRECTORY = getattr(settings, "FILEBROWSER_DIRECTORY", ’uploads/’)
EXTENSIONS
SELECT_FORMATS
When using the browse-function for selecting Files/Folders, you can use an additional query-attribute type in order
to restrict the choices.
1.2.4 Versions
1.2. Settings 5
Django FileBrowser Documentation, Release 3.5.3
Warning: With the next major release (3.6.0), the default setting will be “_versions”.
VERSIONS
VERSION_QUALITY
ADMIN_VERSIONS
ADMIN_THUMBNAIL
1.2.5 Placeholder
With your locale environment, you don’t necessarily have access to all media files (e.g. images uploaded by your
client). Therefore, you can use a PLACEHOLDER.
PLACEHOLDER
SHOW_PLACEHOLDER
Show placeholder (instead of a version) if the original image does not exist:
SHOW_PLACEHOLDER = getattr(settings, "FILEBROWSER_SHOW_PLACEHOLDER", False)
FORCE_PLACEHOLDER
SAVE_FULL_URL
Deprecated since version 3.4.0: With custom storage engines, saving the full URL doesn’t make sense anymore.
Moreover, removing this settings allows for easily replacing a FileBrowseField with Djangos File- or ImageField.
STRICT_PIL
If set to True, the FileBrowser will not try to import a mis-installed PIL:
STRICT_PIL = getattr(settings, ’FILEBROWSER_STRICT_PIL’, False)
IMAGE_MAXBLOCK
see http://mail.python.org/pipermail/image-sig/1999-August/000816.html:
IMAGE_MAXBLOCK = getattr(settings, ’FILEBROWSER_IMAGE_MAXBLOCK’, 1024*1024)
EXCLUDE
1.2. Settings 7
Django FileBrowser Documentation, Release 3.5.3
MAX_UPLOAD_SIZE
NORMALIZE_FILENAME
True if you want to normalize filename on upload and remove all non-alphanumeric characters (except for under-
scores, spaces & dashes):
NORMALIZE_FILENAME = getattr(settings, "FILEBROWSER_NORMALIZE_FILENAME", False)
CONVERT_FILENAME
True if you want to convert the filename on upload (replace spaces and convert to lowercase):
CONVERT_FILENAME = getattr(settings, "FILEBROWSER_CONVERT_FILENAME", True)
LIST_PER_PAGE
DEFAULT_SORTING_BY
DEFAULT_SORTING_ORDER
FOLDER_REGEX
SEARCH_TRAVERSE
True if you want to traverse all subdirectories when searching. Please note that with thousands of files/directories,
this might take a while:
SEARCH_TRAVERSE = getattr(settings, "FILEBROWSER_SEARCH_TRAVERSE", False)
DEFAULT_PERMISSIONS
OVERWRITE_EXISTING
1.2. Settings 9
Django FileBrowser Documentation, Release 3.5.3
API
2.1 API
2.1.1 FileListing
Methods
Note: We defined filter_browse as filter_func (see sites.py). And we did not define a
VERSIONS_BASEDIR for this demonstration, though it is highly recommended to use one.
11
Django FileBrowser Documentation, Release 3.5.3
listing()
Returns all items for the given path with os.listdir(path):
>>> for item in filelisting.listing():
... print item
blog
testfolder
walk()
Returns all items for the given path with os.walk(path):
>>> for item in filelisting.walk():
... print item
blog
blog/1
blog/1/images
blog/1/images/blogimage.jpg
blog/1/images/blogimage_admin_thumbnail.jpg
blog/1/images/blogimage_medium.jpg
blog/1/images/blogimage_small.jpg
blog/1/images/blogimage_thumbnail.jpg
testfolder
testfolder/testimage.jpg
files_listing_total()
Returns a sorted list of FileObjects for listing():
>>> for item in filelisting.files_listing_total():
... print item
uploads/blog/
uploads/testfolder/
files_walk_total()
Returns a sorted list of FileObjects for walk():
>>> for item in filelisting.files_walk_total():
... print item
uploads/blog/
uploads/blog/1/
uploads/blog/1/images/
uploads/blog/1/images/blogimage.jpg
uploads/blog/1/images/blogimage_admin_thumbnail.jpg
uploads/blog/1/images/blogimage_medium.jpg
uploads/blog/1/images/blogimage_small.jpg
uploads/blog/1/images/blogimage_thumbnail.jpg
uploads/testfolder/
uploads/testfolder/testimage.jpg
files_listing_filtered()
Returns a sorted and filtered list of FileObjects for listing():
>>> for item in filelisting.files_listing_filtered():
... print item
uploads/blog/
uploads/testfolder/
files_walk_filtered()
Returns a sorted and filtered list of FileObjects for walk():
12 Chapter 2. API
Django FileBrowser Documentation, Release 3.5.3
Note: The versions are not listed (compared with files_walk_total) because of filter_func.
results_listing_total()
Number of total files, based on files_listing_total():
>>> filelisting.results_listing_total()
2
results_walk_total()
Number of total files, based on files_walk_total():
>>> filelisting.results_walk_total()
10
results_listing_filtered()
Number of filtered files, based on files_listing_filtered():
>>> filelisting.results_listing_filtered()
2
results_walk_filtered()
Number of filtered files, based on files_walk_filtered():
>>> filelisting.results_walk_filtered()
6
2.1.2 FileObject
2.1. API 13
Django FileBrowser Documentation, Release 3.5.3
Attributes
Initial Attributes
path
Path relative to a storage location (including site.directory):
>>> fileobject.path
’uploads/testfolder/testimage.jpg’
head
The directory name of pathname path:
>>> fileobject.head
’uploads/testfolder’
filename
Name of the file (including the extension) or name of the folder:
>>> fileobject.filename
’testimage.jpg’
filename_lower
Lower type of filename.
filename_root
Filename without extension:
>>> fileobject.filename_root
’testimage’
extension
File extension, including the dot. With a folder, the extensions is None:
>>> fileobject.extension
’.jpg’
mimetype
Mimetype, based on http://docs.python.org/library/mimetypes.html:
>>> fileobject.mimetype
(’image/jpeg’, None)
General Attributes
filetype
Type of the file, as defined with EXTENSIONS:
>>> fileobject.filetype
’Image’
filesize
Filesize in Bytes:
>>> fileobject.filesize
870037L
14 Chapter 2. API
Django FileBrowser Documentation, Release 3.5.3
date
Date, based on time.mktime:
>>> fileobject.date
1299760347.0
datetime
Datetime object:
>>> fileobject.datetime
datetime.datetime(2011, 3, 10, 13, 32, 27)
exists
True, if the path exists, False otherwise:
>>> fileobject.exists
True
path
Path relative to a storage location (including site.directory):
>>> fileobject.path
’uploads/testfolder/testimage.jpg’
path_relative_directory
Path relative to site.directory:
>>> fileobject.path_relative_directory
’testfolder/testimage.jpg’
path_full
Absolute server path (based on storage.path):
>>> fileobject.path_full
’/absolute/path/to/server/location/testfolder/testimage.jpg’
dirname
New in version 3.4.
The directory (not including site.directory):
>>> fileobject.dirname
’testfolder’
url
URL for the file/folder (based on storage.url):
>>> fileobject.url
’/media/uploads/testfolder/testimage.jpg’
Image attributes
The image attributes are only useful if the FileObject represents an image.
dimensions
Image dimensions as a tuple:
2.1. API 15
Django FileBrowser Documentation, Release 3.5.3
>>> fileobject.dimensions
(1000, 750)
width
Image width in px:
>>> fileobject.width
1000
height
Image height in px:
>>> fileobject.height
750
aspectratio
Aspect ratio (float format):
>>> fileobject.aspectratio
1.33534908
orientation
Image orientation, either Landscape or Portrait:
>>> fileobject.orientation
’Landscape’
Folder attributes
The folder attributes make sense when the FileObject represents a directory (not a file).
directory
Deprecated since version 3.5.3: Use path_relative_directory instead.
folder
Deprecated since version 3.5.3: Use dirname instead.
is_folder
True, if path is a folder:
>>> fileobject.is_folder
False
is_empty
True, if the folder is empty. False if the folder is not empty or the FileObject is not a folder:
>>> fileobject.is_empty
False
Version attributes
is_version
true if the File is a version of another File:
16 Chapter 2. API
Django FileBrowser Documentation, Release 3.5.3
>>> fileobject.is_version
False
>>> version.is_version
True
versions_basedir
The relative path (from storage location) to the main versions folder. Either VERSIONS_BASEDIR or
site.directory:
>>> fileobject.versions_basedir
’_versions’
>>> version.versions_basedir
’_versions’
original
Returns the original FileObject:
>>> fileobject.original
<FileObject: uploads/testfolder/testimage.jpg>
>>> version.original
<FileObject: uploads/testfolder/testimage.jpg>
original_filename
Get the filename of an original image from a version:
>>> fileobject.original_filename
’testimage.jpg’
>>> version.original_filename
’testimage.jpg’
Methods
Version methods
versions()
List all filenames based on VERSIONS:
>>> fileobject.versions()
[’_versions/testfolder/testimage_admin_thumbnail.jpg’,
’_versions/testfolder/testimage_thumbnail.jpg’,
’_versions/testfolder/testimage_small.jpg’,
’_versions/testfolder/testimage_medium.jpg’,
’_versions/testfolder/testimage_big.jpg’,
’_versions/testfolder/testimage_large.jpg’]
>>> version.versions()
[]
admin_versions()
List all filenames based on ADMIN_VERSIONS:
>>> fileobject.admin_versions()
[’_versions/testfolder/testimage_thumbnail.jpg’,
’_versions/testfolder/testimage_small.jpg’,
’_versions/testfolder/testimage_medium.jpg’,
2.1. API 17
Django FileBrowser Documentation, Release 3.5.3
’_versions/testfolder/testimage_big.jpg’,
’_versions/testfolder/testimage_large.jpg’]
>>> version.admin_versions()
[]
version_name(version_suffix)
Get the filename for a version:
>>> fileobject.version_name("medium")
’testimage_medium.jpg’
version_path(version_suffix)
Get the path for a version:
>>> fileobject.version_path("medium")
’_versions/testfolder/testimage_medium.jpg’
version_generate(version_suffix)
Generate a version:
>>> fileobject.version_generate("medium")
<FileObject: uploads/testfolder/testimage_medium.jpg>
Please note that a version is only generated, if it does not already exist or if the original image is newer than the
existing version.
Delete methods
delete()
Delete the File or Folder from the server.
Warning: If you delete a Folder, all items within the folder are being deleted.
delete_versions()
Delete all VERSIONS.
delete_admin_versions()
Delete all ADMIN_VERSIONS.
18 Chapter 2. API
CHAPTER 3
The FileBrowseField is a custom model field which returns a FileObject. The widgets FileInput and ClearableFileIn-
put are used with the admin app in order to show an additional thumbnail for images.
3.1.1 FileBrowseField
class BlogEntry(models.Model):
image = FileBrowseField("Image", max_length=200, directory="images/", extensions=[".jpg"], blank=
document = FileBrowseField("PDF", max_length=200, directory="documents/", extensions=[".pdf",".do
FileBrowseField in Templates
19
Django FileBrowser Documentation, Release 3.5.3
To show a thumbnail with the changelist, you can define a ModelAdmin method:
from filebrowser.settings import ADMIN_THUMBNAIL
In order to replace the TinyMCE image/file manager with the FileBrowser, you have to use a FileBrowser Callback.
There’s an example TinyMCE configuration file in /static/js/ called TinyMCEAdmin.js. You can either copy the
FileBrowserCallback to your own file or just use tinymce_setup.js (which comes with django-grappelli).
Just add these lines to your ModelAdmin asset definitions:
class Media:
js = [’/path/to/tinymce/jscripts/tiny_mce/tiny_mce.js’,
’/path/to/your/tinymce_setup.js’]
3.1.2 FileInput
class BlogEntryOptions(admin.ModelAdmin):
formfield_overrides = {
models.ImageField: {’widget’: FileInput},
}
3.1.3 ClearableFileInput
class BlogEntryOptions(admin.ModelAdmin):
formfield_overrides = {
models.ImageField: {’widget’: ClearableFileInput},
}
def image(self):
if self.image_upload:
return FileObject(self.image_upload.path)
return None
In order show a thumbnail with your changelist, you could use a ModelAdmin method:
from filebrowser.base import FileObject
Note: There are different ways to achieve this. The above examples show one of several options.
Admin Interface
The main FileBrowser admin application is an extension for the Django admin interface in order to browser your
media folder, upload and rename/delete files.
urlpatterns = patterns(’’,
url(r’^adminurl/filebrowser/’, include(site.urls)),
)
Now you are able to browse the location defined with the storage engine associated to your site.
from django.core.files.storage import DefaultStorage
from filebrowser.sites import import FileBrowserSite
23
Django FileBrowser Documentation, Release 3.5.3
Note: The module variable site from filebrowser.sites is the default FileBrowser application.
The first parameter is a HttpRequest object (representing the submitted form in which a user selected the action)
and the second parameter is a list of FileObjects to which the action should be applied.
The list contains exactly one instance of FileObject (representing the file from the detail view), but this may change in
the future, as custom actions may become available also in browse views (similar to admin actions applied to a list of
checked objects).
Registering an Action
In order to make your action visible, you need to register it with a FileBrowser site:
site.add_action(foo)
Once registered, the action will appear in the detail view of a file. You can also give your action a short description:
foo.short_description = ’Do foo with the File’
This short description will then appear in the list of available actions. If you do not provide a short description, the
function name will be used instead and FileBrowser will replace any underscores in the function name with spaces.
Each custom action can be associated with a specific file type (e.g., images, audio file, etc) to which it applies. In order
to do that, you need to define a predicate/filter function, which takes a single argument (FileObject) and returns True
if your action is applicable to that FileObject. Finally, you need to register this filter function with your action:
foo.applies_to(lambda fileobject: fileobject.filetype == ’Image’)
In the above example, foo will appear in the action list only for image files. If you do not specify any filter function
for your action, FileBrowser considers the action as applicable to all files.
You can provide a feedback to a user about a successful or failed execution of an action by using a message. For
example:
from django.contrib import messages
Some actions may require user confirmation (e.g., in order to prevent accidental and irreversible modification to
files). In order to that, follow the same pattern as with Django’s admin action and return a HttpResponse object
from your action. Good practice for intermediate pages is to implement a confirm view and have your action return
HttpResponseRedirect:
def crop_image(request, fileobjects):
files = ’&f=’.join([f.path_relative for f in fileobjects])
return HttpResponseRedirect(’/confirm/?action=crop_image&f=%s’ % files)
For storage classes other than FileSystemStorage (or those that inherit from that class), there’s more effort involved in
providing a storage object that can be used with FileBrowser. See StorageMixin Class
Note: Prior FileBrowser 3.4, the way to specify FileBrowser‘s MEDIA_ROOT and MEDIA_URL was via settings.py.
Starting from version 3.4, those variables are associated with the storage instance and you can set them as illustrated
in the above example.
Warning: For the reason of backward compatibility, FileBrowser settings FILEBROWSER_MEDIA_ROOT and
FILEBROWSER_MEDIA_URL can still be used to customize FileBrowser as long as you’re using the default
FileBrowser‘s site without having changed its storage engine. In the next major release of FileBrowser these
settings will be removed.
StorageMixin Class
A FileBrowser uses the Django’s Storage class to access media files. However, the API of the Storage
class does not provide all methods necessary for FileBrowser’s functionality. A StorageMixin class from
filebrowser.storage module therefore defines all the additional methods that a FileBrowser requires:
isdir(self, name)
Returns true if name exists and is a directory.
isfile(self, name)
Returns true if name exists and is a regular file.
move(self, old_file_name, new_file_name, allow_overwrite=False)
Moves safely a file from one location to another. If allow_ovewrite==False and new_file_name
exists, raises an exception.
makedirs(self, name)
Creates all missing directories specified by name. Analogue to os.mkdirs().
4.1.4 Views
All views use the staff_member_requird and path_exists decorator in order to check if the server path
actually exists. Some views also use the file_exists decorator.
• Browse, fb_browse Browse a directory on your server. Returns a FileListing.
– Optional query string args: dir, o, ot, q, p, filter_date, filter_type, type
• Create directory, fb_createdir Create a new folder on your server.
– Optional query string args: dir
– Signals: filebrowser_pre_createdir, filebrowser_post_createdir
• Upload, fb_upload Multiple upload.
– Optional query string args: dir
– Signals: filebrowser_pre_upload, filebrowser_post_upload
• Edit, fb_edit Edit a file or folder.
– Required query string args: filename
– Optional query string args: dir
– Signals: filebrowser_pre_rename, filebrowser_post_rename
You are able to apply custom actions (see Custom Actions) to the edit-view.
• Confirm delete, fb_confirm_delete Confirm the deletion of a file or folder.
– Required query string args: filename
– Optional query string args: dir
If you try to delete a folder, all files/folders within this folder are listed on this page.
• Delete, fb_delete Delete a file or folder.
– Required query string args: filename
– Optional query string args: dir
– Signals: filebrowser_pre_delete, filebrowser_post_delete
Warning: If you delete a Folder, all items within this Folder are being deleted.
4.1.5 Signals
The FileBrowser sends a couple of different signals. Please take a look at the module filebrowser.signals for further
explanation on the provided arguments.
• filebrowser_pre_upload Sent before a an Upload starts.
• filebrowser_post_upload Sent after an Upload has finished.
• filebrowser_pre_delete Sent before an Item (File, Folder) is deleted.
• filebrowser_post_delete Sent after an Item (File, Folder) has been deleted.
• filebrowser_pre_createdir Sent before a new Folder is created.
• filebrowser_post_createdir Sent after a new Folder has been created.
• filebrowser_pre_rename Sent before an Item (File, Folder) is renamed.
• filebrowser_post_rename Sent after an Item (File, Folder) has been renamed.
• filebrowser_actions_pre_apply Sent before a custom action is applied.
• filebrowser_actions_post_apply Sent after a custom action has been applied.
Image Versions
5.1 Versions
With the FileBrowser, you are able to define different versions/sizes for images. This enables you to save an original
image on your server while having different versions of that image to automatically fit your websites grid. Versions
are also useful for responsive/adaptive layouts.
FILEBROWSER_VERSIONS = {
’big’: {’verbose_name’: ’Big (6 col)’, ’width’: 460, ’height’: ’’, ’opts’: ’’, ’methods’: [graysc
})
29
Django FileBrowser Documentation, Release 3.5.3
When using the FileBrowser with the admin interface, you need to define ADMIN_VERSIONS and
ADMIN_THUMBNAIL (see Settings). ADMIN_VERSIONS are available with the admin, i.e. you are able to see
these versions with the image detail view and you are able to select the versions with the FileBrowseField model field.
FILEBROWSER_ADMIN_VERSIONS = [’thumbnail’, ’small’, ’medium’, ’big’, ’large’]
FILEBROWSER_ADMIN_THUMBNAIL = ’admin_thumbnail’
With your templates, you have two different tags to choose from: version and version_object. With both
tags, the version will be generated if it doesn’t already exist OR if the original image is newer than the version. In
order to update an image, you just overwrite the original image and the versions will be generated automatically (as
you request them within your template).
A Model example:
from filebrowser.fields import FileBrowseField
class BlogEntry(models.Model):
image = FileBrowseField("Image", max_length=200, blank=True, null=True)
With your templates, use version if you simply need to retrieve the URL or version_object if you need to get
a FileObject:
<!-- load filebrowser templatetags -->
{% load fb_versions %}
Templatetag version
Templatetag version_object
Note: With both templatetags, version_prefix can either be a string or a variable. If version_prefix is a
string, use quotes.
5.1.5 Placeholder
When developing on a locale machine or a development-server, you might not have all the images (resp. media-files)
available that are on your production instance and downloading these files on a regular basis might not be an option.
In that case, you can use a placeholder instead of a version. You just need to define the PLACEHOLDER and overwrite
the settings SHOW_PLACEHOLDER and/or FORCE_PLACEHOLDER (see Placeholder).
fb_version_generate
If you need to generate certain (or all) versions, type:
python manage.py fb_version_generate
fb_version_remove
If you need to generate certain (or all) versions, type:
python manage.py fb_version_generate
5.1. Versions 31
Django FileBrowser Documentation, Release 3.5.3
Help
6.1 Help
6.1.1 FAQ
If you need your editors or customers to manage files, the FileBrowser is an alternative to an FTP-client. Moreover,
you are able to define different image versions according to your websites grid. Alternatives to the FileBrowser can be
found at http://djangopackages.com/grids/g/file-managers/.
Do I need Grappelli?
Grappelli is a requirement for using the FileBrowser. There are several filebrowser-no-grappelli repositories (most of
them on GitHub), but we don’t follow the development.
I need help!
see Troubleshooting.
The FileBrowser is about managing files. We think that you should prepare your files before uploading them to the
server.
33
Django FileBrowser Documentation, Release 3.5.3
We’ve developed the FileBrowser for a couple of years and use it with almost all of our clients. That said, Grappelli is
the more stable and mature application.
Help is very much needed and appreciated. Test the FileBrowser and submit feedback/patches.
The FileBrowser is developed and maintained by Patrick Kranzlmüller & Axel Swoboda of vonautomatisch.
6.1.2 Troubleshooting
Warning: Please note that the tests will copy files to your filesystem.
Check issues
Add a ticket
34 Chapter 6. Help
Django FileBrowser Documentation, Release 3.5.3
• Please do NOT add tickets if you’re having problems with serving static/media-files (because this is not related
to the FileBrowser).
• Please do NOT add tickets referring to Djangos trunk version.
• At best: add a patch.
Note: Be aware that we may close issues not following these guidlines without further notifications.
6.1.3 Translation
Supported Languages
see https://www.transifex.net/projects/p/django-filebrowser/resource/djangopo/
FileBrowser 3.5 is compatible with Django 1.4, 1.5 and 1.6 as well as Grappelli 2.4 and 2.5.
6.2 Changelog
6.2. Changelog 35
Django FileBrowser Documentation, Release 3.5.3
36 Chapter 6. Help
Django FileBrowser Documentation, Release 3.5.3
• Fixed a bug with versions not being generated (in case of capitalized extensions).
6.2. Changelog 37
Django FileBrowser Documentation, Release 3.5.3
38 Chapter 6. Help
CHAPTER 7
Main Features
39
Django FileBrowser Documentation, Release 3.5.3
Code
https://github.com/sehmaschine/django-filebrowser
41
Django FileBrowser Documentation, Release 3.5.3
42 Chapter 8. Code
CHAPTER 9
Discussion
43
Django FileBrowser Documentation, Release 3.5.3
44 Chapter 9. Discussion
CHAPTER 10
• FileBrowser 3.5.4 (Development Version, not yet released, see Branch Stable/3.5.x)
• FileBrowser 3.5.3 (January 7, 2014): Compatible with Django 1.4/1.5/1.6
Older versions are availabe at GitHub, but are not supported anymore.
45