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