Advertisement
clime

Untitled

Nov 7th, 2013
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #urls
  2.       url(r'^media/images/(?P<rel_model_tag>(event|member|crag))/(?P<rel_object_id>\d+)/(?P<action>(view|edit))/$', views.video_list, name='image-list')
  3.       url(r'^media/videos/(?P<rel_model_tag>(event|member|crag))/(?P<rel_object_id>\d+)/(?P<action>(view|edit))/$', views.image_list, name='video-list')
  4.    
  5.  
  6.  
  7.    
  8. #views
  9. def image_list(request, rel_model_tag, rel_object_id, action):
  10.     return media_list(request, Image, rel_model_tag, rel_object_id, action)
  11.  
  12.  
  13. def video_list(request, rel_model_tag, rel_object_id, action):
  14.     return media_list(request, Video, rel_model_tag, rel_object_id, action)
  15.  
  16.  
  17. def media_list(request, model, rel_model_tag, rel_object_id, action):
  18.     rel_model = tag_to_model(rel_model_tag)
  19.     rel_object = get_object_or_404(rel_model, pk=rel_object_id)
  20.  
  21.     if model == Image:
  22.         star_media = rel_object.star_image
  23.     else:
  24.         star_media = rel_object.star_video
  25.  
  26.     filter_params = {}
  27.     if rel_model == Event:
  28.         filter_params['media__event'] = rel_object_id
  29.     elif rel_model == Member:
  30.         filter_params['media__members'] = rel_object_id
  31.     elif rel_model == Crag:
  32.         filter_params['media__crag'] = rel_object_id
  33.  
  34.     media_list = model.objects.filter(~Q(id=star_media.id)).filter(**filter_params).order_by('media__date_added').all()
  35.  
  36.     context = {
  37.         'media_list': media_list,
  38.         'star_media': star_media,
  39.     }
  40.  
  41.     if action == 'edit':
  42.         return media_edit_list(request, model, rel_model_tag, rel_model_id, context)
  43.  
  44.     return media_view_list(request, model, rel_model_tag, rel_model_id, context)
  45.  
  46.  
  47. def media_view_list(request, model, rel_model_tag, rel_object_id, context):
  48.     if request.is_ajax():
  49.         context['base_template'] = 'boxes/base-lite.html'
  50.     return render(request, 'media/list-items.html', context)
  51.  
  52.  
  53. def media_edit_list(request, model, rel_model_tag, rel_object_id, context):
  54.     if model == Image:
  55.         get_media_record = get_image_record
  56.     else:
  57.         get_media_record = get_video_record
  58.  
  59.     media_list = [get_media_record(media, rel_model_tag, rel_object_id) for media in context['media_list']]
  60.  
  61.     if context['star_media']:
  62.         star_media = get_media_record(star_media, rel_model_tag, rel_object_id)
  63.         star_media['starred'] = True
  64.     else:
  65.         star_media = None
  66.  
  67.     json = simplejson.dumps({
  68.         'star_media': star_media,
  69.         'media_list': media_list,
  70.     })
  71.     return HttpResponse(json, content_type=json_response_mimetype(request))
  72.  
  73.  
  74.  
  75.  
  76. # models
  77. class Media(models.Model, WebModel):
  78.     title = models.CharField('title', max_length=128, default='', db_index=True, blank=True)
  79.     event = models.ForeignKey(Event, null=True, default=None, blank=True)
  80.     crag = models.ForeignKey(Crag, null=True, default=None, blank=True)
  81.     members = models.ManyToManyField(Member, blank=True)
  82.     added_by = models.ForeignKey(Member, related_name='added_images')
  83.     date_added = models.DateTimeField('date added', auto_now_add=True, null=True, default=None, editable=False)
  84.  
  85.     def __unicode__(self):
  86.         return self.title
  87.  
  88.     def get_absolute_url(self):
  89.         return self.image.url if self.image else self.video.embed_url
  90.  
  91.  
  92. class Image(Media):
  93.     image = ProcessedImageField(upload_to='uploads',
  94.                                 processors=[ResizeToFit(width=1024, height=1024, upscale=False)],
  95.                                 format='JPEG',
  96.                                 options={'quality': 75})
  97.     thumbnail_1 = ImageSpecField(source='image',
  98.                                 processors=[SmartResize(width=178, height=134)],
  99.                                 format='JPEG',
  100.                                 options={'quality': 75})
  101.     thumbnail_2 = ImageSpecField(source='image',
  102.                                 #processors=[SmartResize(width=256, height=192)],
  103.                                 processors=[ResizeToFit(height=164)],
  104.                                 format='JPEG',
  105.                                 options={'quality': 75})
  106.  
  107.  
  108. class Video(Media):
  109.     url = models.URLField('url', max_length=256, default='')
  110.     embed_url = models.URLField('embed url', max_length=256, default='', blank=True)
  111.     author = models.CharField('author', max_length=64, default='', blank=True)
  112.     thumbnail = ProcessedImageField(upload_to='uploads',
  113.                                 processors=[ResizeToFit(width=1024, height=1024, upscale=False)],
  114.                                 format='JPEG',
  115.                                 options={'quality': 75}, null=True, default=None, blank=True)
  116.     thumbnail_1 = ImageSpecField(source='thumbnail',
  117.                                 processors=[SmartResize(width=178, height=134)],
  118.                                 format='JPEG',
  119.                                 options={'quality': 75})
  120.     thumbnail_2 = ImageSpecField(source='thumbnail',
  121.                                 #processors=[SmartResize(width=256, height=192)],
  122.                                 processors=[ResizeToFit(height=164)],
  123.                                 format='JPEG',
  124.                                 options={'quality': 75})
  125.  
  126.   class Crag(models.Model, WebModel):
  127.       name = models.CharField('name', max_length=64, default='', db_index=True)
  128.       normalized_name = models.CharField('normalized name', max_length=64, default='', editable=False)
  129.       type = models.IntegerField('crag type', null=True, default=None, choices=crag_types)
  130.       description = models.TextField('description', default='', blank=True)
  131.       country = models.ForeignKey('country', null=True, default=None) #TODO: make this not null when db enables it
  132.       latitude = models.FloatField('latitude', null=True, default=None)
  133.       longitude = models.FloatField('longitude', null=True, default=None)
  134.       location_index = FixedCharField('location index', length=24, default='', editable=False, db_index=True) # handled by db, used for marker clustering
  135.       added_by = models.ForeignKey('member', null=True, default=None)
  136.       #route_count = models.IntegerField('route count', null=True, default=None, editable=False)
  137.       date_created = models.DateTimeField('date created', auto_now_add=True, null=True, default=None, editable=False)
  138.       last_modified = models.DateTimeField('last modified', auto_now=True, null=True, default=None, editable=False)
  139.       star_image = models.OneToOneField('Image', null=True, default=None, related_name='star_crags', on_delete=models.SET_NULL)
  140.       star_video = models.OneToOneField('Video', null=True, default=None, related_name='star_crags', on_delete=models.SET_NULL)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement