Search code examples
djangoimagekitdjango-imagekitphotologue

Integrating Photologue


I want to integrate photologue with my Django app and use it to display photos in a vehicle inventory...kinda like what is offered by Boost Motor Group Inc. I've already integrated the app so the next step which I'm trying to figure out is how to hook it up into my vehicle model and also how to display the photos. My vehicle model looks like this BTW

class Vehicle(models.Model):
    stock_number = models.CharField(max_length=6, blank=False)
    vin = models.CharField(max_length=17, blank=False)
    common_vehicle = models.ForeignKey(CommonVehicle)
    exterior_colour = models.ForeignKey(ExteriorColour)
    interior_colour = models.ForeignKey(InteriorColour)
    interior_type = models.ForeignKey(InteriorType)
    odometer_unit = models.ForeignKey(OdometerUnit)
    status = models.ForeignKey(Status)
    odometer_reading = models.PositiveIntegerField()
    selling_price = models.PositiveIntegerField()
    purchase_date = models.DateField()
    sales_description = models.CharField(max_length=60, blank=False)
    feature_sets = models.ManyToManyField(FeatureSet, blank=True)
    features = models.ManyToManyField(Feature, blank=True)

    def __unicode__(self):
        return self.stock_number

Solution

  • I use ImageKit (great!)

    model.py

    from imagekit.models import ImageModel
    class Photo(ImageModel):
        name = models.CharField(max_length=100)
        original_image = models.ImageField(upload_to='photos')
        num_views = models.PositiveIntegerField(editable=False, default=0)
        content_type = models.ForeignKey(ContentType)
        object_id = models.PositiveIntegerField()
        content_object = generic.GenericForeignKey('content_type', 'object_id')
    
        class IKOptions:
            # This inner class is where we define the ImageKit options for the model
            spec_module = 'cms.specs'
            cache_dir = 'photos'
            image_field = 'original_image'
            save_count_as = 'num_views'
    
    class Vehicle(models.Model):
        images = generic.GenericRelation('Photo', blank = True, null = True)  
    

    specs.py

    from imagekit.specs import ImageSpec 
    from imagekit import processors 
    from imagekit.lib import *
    
    # first we define our thumbnail resize processor 
    class ResizeThumb(processors.Resize): 
        width = 100 
        height = 75 
        crop = True
    
    # now lets create an adjustment processor to enhance the image at small sizes 
    class EnchanceThumb(processors.Adjustment): 
        contrast = 1.2 
        sharpness = 1.1 
    
    # now we can define our thumbnail spec 
    class Thumbnail(ImageSpec): 
        processors = [ResizeThumb, EnchanceThumb] 
    

    in your template you will access this thumbnails like this:

    {% for p in vehicle.images.all %}
       {{ p.get_thumbnail.url }}
    {% endfor %}
    

    admin.py could look like this:

    class ImagesInline(generic.GenericTabularInline):
        model = Photo
        max_num =4
    
    class VehicleAdmin(admin.ModelAdmin):
        inlines = [ImagesInline]
    

    All about ImageKit

    add the file specs.py to your app and tell ImageKit of it like this

      class IKOptions:
            # This inner class is where we define the ImageKit options for the model
            spec_module = 'cms.specs # ur_app.specs
    

    add a field to your Photo-Model to save what kind of view/ content it shows. i.e. ChoiceField

    In view/template you can filter for it