######################### # urls.py ######################### from django.conf.urls.defaults import * #import settings urlpatterns = patterns('', (r'^admin/', include('django.contrib.admin.urls')), (r'^$', 'myproject.sam.views.photos'), (r'^photos/$', 'myproject.sam.views.photos'), (r'^gallery/image/$', 'myproject.sam.views.image'), (r'^galleries/(.+)/(.+)/$', 'myproject.sam.views.image'), (r'^galleries/(.+)/$', 'myproject.sam.views.gallery'), (r'^debug/$', 'myproject.sam.views.debug_view'), (r'^testimonials/$', 'myproject.sam.views.testimonials'), (r'^(.+)/$', 'myproject.sam.views.pages'), ) ################################## # views.py ################################## from django.shortcuts import render_to_response, get_object_or_404 from path import * import settings from myproject.sam.models import Page, Testimonial from PIL import IptcImagePlugin from PIL import Image from math import sqrt, ceil # settings.MEDIA_URL += "/sam" site_title = "Sam Tinson Photographer" tagline = "What a swell guy!" base_url = "/sam/" media_folder = path(settings.MEDIA_ROOT) # media_folder = path("C:\\Documents and Settings\\Andy\\My Documents\\Programming\\Python\\Django\\sam") gallery_folder = media_folder / "images" / "galleries" top_level_pages = Page.objects.all().order_by('order') global_context = {'site_title': site_title, 'tagline':tagline, 'base_url': base_url, 'settings': settings, 'top_level_pages': top_level_pages} def photos(request): galleries = [d.namebase for d in gallery_folder.dirs()] context = {'page_title':'photos','galleries':galleries} context.update(global_context) return render_to_response('sam/photos.html', context) def pages(request,page_name): page = get_object_or_404(Page, pk=page_name) context = {'page_title':page.name,'page':page} context.update(global_context) return render_to_response('sam/page.html', context) def testimonials(request): page = get_object_or_404(Page, pk='testimonials') testimonials = Testimonial.objects.all().order_by('order') context = {'page_title':page.name,'page':page, 'testimonials':testimonials} context.update(global_context) return render_to_response('sam/testimonials.html', context) def gallery(request, gallery): image_folder = gallery_folder / gallery images = [d.name for d in image_folder.glob('*.jpg')] num_columns = ceil(sqrt(len(images))) num_rows = ceil(len(images)/num_columns) image_list = [] for row in range(int(num_rows)): image_row = [] for column in range(int(num_columns)): if len(images)>0: image_row.append(images.pop()) image_list.append(image_row) context = {'page_title':gallery,'gallery':gallery,'image_list':image_list,'num_columns':num_columns} context.update(global_context) return render_to_response('sam/gallery.html', context) def image(request,gallery,image): image_folder = gallery_folder / gallery image_filename = image_folder / (image+".jpg") im = Image.open(image_filename) iptc = IptcImagePlugin.getiptcinfo(im) context = {'page_title':image,'gallery':gallery,'image':image,'next_image':'next','previous_image':'prev', 'caption':iptc [(2,120)]} context.update(global_context) return render_to_response('sam/image.html', context)