View difference between Paste ID: xnQheym6 and vtKPynuT
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
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
    # models
76
    class Media(models.Model, WebModel):
77
        title = models.CharField('title', max_length=128, default='', db_index=True, blank=True)
78
        event = models.ForeignKey(Event, null=True, default=None, blank=True)
79
        crag = models.ForeignKey(Crag, null=True, default=None, blank=True)
80
        members = models.ManyToManyField(Member, blank=True)
81
        added_by = models.ForeignKey(Member, related_name='added_images')
82
        date_added = models.DateTimeField('date added', auto_now_add=True, null=True, default=None, editable=False)
83
    
84
        def __unicode__(self):
85
            return self.title
86
    
87
        def get_absolute_url(self):
88
            return self.image.url if self.image else self.video.embed_url
89
    
90
    
91
    class Image(Media):
92
        image = ProcessedImageField(upload_to='uploads',
93
                                    processors=[ResizeToFit(width=1024, height=1024, upscale=False)],
94
                                    format='JPEG',
95
                                    options={'quality': 75})
96
        thumbnail_1 = ImageSpecField(source='image',
97
                                    processors=[SmartResize(width=178, height=134)],
98
                                    format='JPEG',
99
                                    options={'quality': 75})
100
        thumbnail_2 = ImageSpecField(source='image',
101
                                    #processors=[SmartResize(width=256, height=192)],
102
                                    processors=[ResizeToFit(height=164)],
103
                                    format='JPEG',
104
                                    options={'quality': 75})
105
    
106
    
107
    class Video(Media):
108
        url = models.URLField('url', max_length=256, default='')
109
        embed_url = models.URLField('embed url', max_length=256, default='', blank=True)
110
        author = models.CharField('author', max_length=64, default='', blank=True)
111
        thumbnail = ProcessedImageField(upload_to='uploads',
112
                                    processors=[ResizeToFit(width=1024, height=1024, upscale=False)],
113
                                    format='JPEG',
114
                                    options={'quality': 75}, null=True, default=None, blank=True)
115
        thumbnail_1 = ImageSpecField(source='thumbnail',
116
                                    processors=[SmartResize(width=178, height=134)],
117
                                    format='JPEG',
118
                                    options={'quality': 75})
119
        thumbnail_2 = ImageSpecField(source='thumbnail',
120
                                    #processors=[SmartResize(width=256, height=192)],
121
                                    processors=[ResizeToFit(height=164)],
122
                                    format='JPEG',
123
                                    options={'quality': 75})
124
    
125
      class Crag(models.Model, WebModel):
126
          name = models.CharField('name', max_length=64, default='', db_index=True)
127
          normalized_name = models.CharField('normalized name', max_length=64, default='', editable=False)
128
          type = models.IntegerField('crag type', null=True, default=None, choices=crag_types)
129
          description = models.TextField('description', default='', blank=True)
130
          country = models.ForeignKey('country', null=True, default=None) #TODO: make this not null when db enables it
131
          latitude = models.FloatField('latitude', null=True, default=None)
132
          longitude = models.FloatField('longitude', null=True, default=None)
133
          location_index = FixedCharField('location index', length=24, default='', editable=False, db_index=True) # handled by db, used for marker clustering
134
          added_by = models.ForeignKey('member', null=True, default=None)
135
          #route_count = models.IntegerField('route count', null=True, default=None, editable=False)
136
          date_created = models.DateTimeField('date created', auto_now_add=True, null=True, default=None, editable=False)
137
          last_modified = models.DateTimeField('last modified', auto_now=True, null=True, default=None, editable=False)
138
          star_image = models.OneToOneField('Image', null=True, default=None, related_name='star_crags', on_delete=models.SET_NULL)
139
          star_video = models.OneToOneField('Video', null=True, default=None, related_name='star_crags', on_delete=models.SET_NULL)