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