An artist's portfolio as a pluggable Django app, based on the following assumptions:
- A portfolio consists of collections containing artworks.
- Artworks have one or more pictures and (optionally) a title and a description.
- Artworks can be listed from within collections or categories.
- Well tested, decent code coverage and used in production environments.
- Makes good use of Django's admin; drag and drop sorting, search, filtering, pagination and thumbnail previews.
- All strings are fully translatable (will integrate with Transifex on request, feel free to create a GitHub issue).
- Optional template context processors and sitemaps available.
- Very basic front-end templates to help kickstart integration.
- South migrations available for hassle-free upgrade paths.
- pip install -e git+https://github.com/dokterbob/django-portfolio.git#egg=django-portfolio
- Follow sorl-thumbnail's installation instructions.
3. Follow django-admin-sortable's installation instructions. Make sure to install the admin-sortable version corresponding to your Django release (1.4.x for 1.4.x) and (1.5.x for 1.5.x). 4. Add portfolio to INSTALLED_APPS. 5. Include URL's into Django's URL space, like such:
urlpatterns = patterns('', (r'^portfolio/', include('portfolio.urls')), ... )
Have a cup of coffee! You deserve one; basic integration of the portfolio app is done now.
Copy the minimal base templates from the templates folder to your project's template folder and start customizing.
(Optionally) Configure sitemaps by updating your sitemaps dictionary with portfolio.sitemaps.portfolio_sitemaps.
For example:
from portfolio.sitemaps import portfolio_sitemaps sitemaps = { 'blog': GenericSitemap(info_dict, priority=0.6), } sitemaps.update(portfolio_sitemaps) ... urlpatterns = patterns('', (r'^portfolio/', include('portfolio.urls')), # Sitemaps (r'^sitemap\.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}), )
(Optionally) Enable template context processors for collections, artworks and/or categories in settings.py:
TEMPLATE_CONTEXT_PROCESSORS = ( ... 'portfolio.context_processors.collections', 'portfolio.context_processors.artworks' 'portfolio.context_processors.categories' )