Quick Start

Installation

You can install with pip from PyPi via:

pip install django-galleryfield

Or for the latest dev version, via:

pip install git+https://github.com/dzhuang/django-galleryfield.git

Python version

django-galleryfield is compatible with Python 3 (3.6 or later were tested).

Dependencies

Python dependencies:

Static dependencies:

Configurations

  • In settings.py, add 3 lines in you INSTALLED_APP:

INSTALLED_APPS = (
    ...,
    'sorl.thumbnail',
    'galleryfield',
    ...,
)

DJANGO_GALLERY_FIELD_CONFIG = ...
  • In urls.py, add the following lines:

from django.urls import include, path

urlpatterns += [path(r"images-handler/", include("galleryfield.urls"))]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
  • Sync the database:

    python manage.py migrate galleryfield
    

Run the demo

The best way to have a glance of how django-galleryfield works is to run the demo:

git clone https://github.com/dzhuang/django-galleryfield.git
cd django-galleryfield
cd demo
pip install -r requirements.txt
cd ..
python manage.py migrate
python manage.py createsuperuser # Create a superuser account so that you can upload images
python manage.py runserver

Note

You might need to install JSON1 extension for SQLite for this the demo to run properly. See Enabling JSON1 extension on SQLite.

Usage in Views

To correctly render GalleryField in general views, you are required to include bootstrap.css, jQuery.js and bootstrap.js (or their minified version), with the exact order, in page head. Notice that the major version of Twitter Bootstrap should be of the same version with the version in DJANGO_GALLERY_FIELD_CONFIG["bootstrap_version"], which defaults to 3.

Note: To prevent multiple click on form submit buttons, you can add gallery-widget-submit-button CSS classname to the submit buttons of the form.

Usage in Admin

To correctly render GalleryField in admin, the model form should be instantiated with galleryfield.mixins.GalleryFormMediaMixin. For example, if the Gallery model is MyGallery, the snippet follows:

my_app/admin.py
 from django import forms
 from django.contrib import admin

 from my_app.models import MyGallery
 from galleryfield.mixins import GalleryFormMediaMixin


 class MyGalleryAdminForm(GalleryFormMediaMixin, forms.ModelForm):
     class Meta:
         model = MyGallery
         exclude = ()


 class MyGalleryAdmin(admin.ModelAdmin):
     form = MyGalleryAdminForm


 admin.site.register(MyGallery, MyGalleryAdmin)