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
django-galleryfield is compatible with Python 3 (3.6 or later were tested).
Bootstrap (CDN URLs included)
jQuery 3.6 (CDN URL included)
jQuery UI (included)
blueimp/jQuery-File-Upload by Sebastian Tschan (included)
blueimp/Gallery by Sebastian Tschan (included)
cropper by Chen Fengyuan (included)
FontAwesome Icons (included)
Material Design Icons (included)
Subset-iconfont by dzhuang (included)
settings.py, add 3 lines in you
INSTALLED_APPS = ( ..., 'sorl.thumbnail', 'galleryfield', ..., ) DJANGO_GALLERY_CONFIG = ...
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
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.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
CSS classname to the submit buttons of the form.
Usage in Admin
To correctly render
admin, the model form should be instantiated with
galleryfield.mixins.GalleryFormMediaMixin. For example, if the Gallery model is
the snippet follows:
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)