Galerie | clone + uprava modelu galerie pecemesrdcem
Model upraven pro potreby M&M-miho webu
This commit is contained in:
		
							parent
							
								
									741040fc9c
								
							
						
					
					
						commit
						275630daee
					
				
					 5 changed files with 121 additions and 0 deletions
				
			
		
							
								
								
									
										7
									
								
								galerie/TODO
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								galerie/TODO
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | ||||||
|  | ======== | ||||||
|  | | TODO | | ||||||
|  | |======| | ||||||
|  | 
 | ||||||
|  | * zvolit velikosti velke a male fotky | ||||||
|  | * vycteni EXIFu | ||||||
|  | * razeni podle casu | ||||||
							
								
								
									
										0
									
								
								galerie/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								galerie/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										114
									
								
								galerie/models.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								galerie/models.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,114 @@ | ||||||
|  | # coding: utf-8 | ||||||
|  | 
 | ||||||
|  | from django.db import models | ||||||
|  | import seminar.models | ||||||
|  | from django.db.models import Q | ||||||
|  | from django.utils import timezone | ||||||
|  | 
 | ||||||
|  | from PIL import Image | ||||||
|  | import os | ||||||
|  | from cStringIO import StringIO | ||||||
|  | from django.core.files.base import ContentFile | ||||||
|  | 
 | ||||||
|  | from seminar.models import Soustredeni | ||||||
|  | 
 | ||||||
|  | VZDY=0 | ||||||
|  | ORG=1 | ||||||
|  | NIKDY=2 | ||||||
|  | VIDITELNOST = ( | ||||||
|  |     (VZDY, 'Vždy'), | ||||||
|  |     (ORG, 'Organizátorům'), | ||||||
|  |     (NIKDY, 'Nikdy'), | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | class Obrazek(models.Model): | ||||||
|  |     # TODO vkladat do slozek podle soustredeni | ||||||
|  |   obrazek_velky = models.ImageField(upload_to='Galerie/%Y/%m/%d', | ||||||
|  |     help_text = "Lze vložit libovolně velký obrázek. Ideální je, aby alespoň jeden rozměr měl alespoň 500px.") | ||||||
|  |   obrazek_stredni = models.ImageField(upload_to='Galerie/%Y/%m/%d/stredni', null = True, editable = False) | ||||||
|  |   obrazek_maly = models.ImageField(upload_to='Galerie/%Y/%m/%d/male', null = True, editable = False) | ||||||
|  |   nazev = models.CharField('Název', max_length=50, blank = True, null = True) | ||||||
|  |   popis = models.TextField('Popis', blank = True, null = True) | ||||||
|  |   datum_vlozeni = models.DateTimeField('Datum vložení', auto_now_add = True) | ||||||
|  |   datum = models.DateTimeField('Datum pořízení fotografie', blank = False) # TODO zjistit z EXIFU | ||||||
|  |   galerie = models.ForeignKey('Galerie') | ||||||
|  |   poradi = models.IntegerField('Pořadí', blank = True, null = True) | ||||||
|  |   def __unicode__(self): | ||||||
|  |     return self.nazev + " -- " + unicode(self.obrazek_velky.name) + " (" + str(self.datum) + ")" | ||||||
|  |   class Meta: | ||||||
|  |     verbose_name = 'Obrázek' | ||||||
|  |     verbose_name_plural = 'Obrázky' | ||||||
|  |   def save(self): | ||||||
|  |     original = Image.open(self.obrazek_velky) | ||||||
|  |     jmeno = os.path.basename(self.obrazek_velky.file.name) | ||||||
|  |     Obrazek._vyrobMiniaturu(original, jmeno, 500, self.obrazek_stredni) | ||||||
|  |     Obrazek._vyrobMiniaturu(original, jmeno, 200, self.obrazek_maly) | ||||||
|  |     super(Obrazek, self).save() | ||||||
|  | 
 | ||||||
|  |   @staticmethod | ||||||
|  |   def _vyrobMiniaturu(original, jmeno, maximum, field): | ||||||
|  |     zmensenina = Obrazek._zmensiObrazek(original, maximum) | ||||||
|  |     f = StringIO() | ||||||
|  |     try: | ||||||
|  |       zmensenina.save(f, format=original.format) | ||||||
|  |       data = ContentFile(f.getvalue()) | ||||||
|  |     finally: | ||||||
|  |       f.close() | ||||||
|  |     field.save(jmeno, data, save = False) | ||||||
|  |    | ||||||
|  |   @staticmethod | ||||||
|  |   def _zmensiObrazek(original, maximum): | ||||||
|  |     """Preskaluje obrazek tak, aby byl zachovan pomer stran a zadny rozmer | ||||||
|  |     nepresahoval maxRozmer. Pokud zadny rozmer nepresahuje maxRozmer, tak | ||||||
|  |     vrati puvodni obrazek (tj. nedojde ke zvetseni obrazku).""" | ||||||
|  |     novaVelikost = Obrazek._zmensiVelikost(original.size, maximum) | ||||||
|  |     return original.resize(novaVelikost, Image.ANTIALIAS) | ||||||
|  | 
 | ||||||
|  |   @staticmethod | ||||||
|  |   def _zmensiVelikost(velikost, maximum): | ||||||
|  |     maximum = float(maximum) | ||||||
|  |     w, h = velikost | ||||||
|  |     soucasneMaximum = max(w, h) | ||||||
|  |     if soucasneMaximum <= maximum: | ||||||
|  |       return velikost | ||||||
|  |     pomer = maximum/soucasneMaximum | ||||||
|  |     return (int(w * pomer), int(h * pomer)) | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  | class Galerie(models.Model): | ||||||
|  |   nazev = models.CharField('Název', max_length=100) | ||||||
|  |   datum_vytvoreni = models.DateTimeField('Datum vytvoření', auto_now_add = True) | ||||||
|  |   datum_zmeny = models.DateTimeField('Datum poslední změny', auto_now = True) | ||||||
|  |   popis = models.TextField('Popis', blank = True, null = True) | ||||||
|  |   titulni_obrazek = models.ForeignKey(Obrazek, blank = False, null = True, related_name = "+", on_delete = models.SET_NULL) | ||||||
|  |   zobrazit = models.IntegerField('Zobrazit?', default = ORG, choices = VIDITELNOST) | ||||||
|  |   galerie_up = models.ForeignKey('Galerie', blank = True, null = True) | ||||||
|  |   soustredeni = models.ForeignKey(Soustredeni, blank = True, null = True) | ||||||
|  | 
 | ||||||
|  |   def __unicode__(self): | ||||||
|  |     return self.nazev | ||||||
|  |   class Meta: | ||||||
|  |     verbose_name = 'Galerie' | ||||||
|  |     verbose_name_plural = 'Galerie' | ||||||
|  | 
 | ||||||
|  |   #def link_na_preview(self): | ||||||
|  |     #"""Odkaz na galerii, používá se v admin rozhranní. """ | ||||||
|  |     #return '<a href="/fotogalerie/galerie/%s/">Preview</a>' % self.id | ||||||
|  |   #link_na_preview.allow_tags = True | ||||||
|  |   #link_na_preview.short_description = 'Zobrazit galerii' | ||||||
|  | # | ||||||
|  |   #def je_publikovano(self): | ||||||
|  |     #"""Vraci True, pokud je tato galerie publikovana. """  | ||||||
|  |     #if self.zobrazit == VZDY: | ||||||
|  |       #return True | ||||||
|  |     #if self.zobrazit == PODLE_CLANKU: | ||||||
|  |       #for clanek in self.clanek_set.all(): | ||||||
|  |         #if clanek.je_publikovano(): | ||||||
|  |           #return True | ||||||
|  |     #return False | ||||||
|  | # | ||||||
|  |   #@staticmethod | ||||||
|  |   #def publikovane_galerie(): | ||||||
|  |     #"""Vraci galerie, ktere uz maji byt publikovane.""" | ||||||
|  |     #clanky = Blog.models.Clanek.publikovane_clanky() | ||||||
|  |     #return Galerie.objects.filter(Q(zobrazit=VZDY) | (Q(clanek__in=clanky) & Q(zobrazit=PODLE_CLANKU))).distinct() | ||||||
							
								
								
									
										
											BIN
										
									
								
								galerie/static/galerie/prvky/dalsi.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								galerie/static/galerie/prvky/dalsi.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1.2 KiB | 
							
								
								
									
										
											BIN
										
									
								
								galerie/static/galerie/prvky/predchozi.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								galerie/static/galerie/prvky/predchozi.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1.2 KiB | 
		Loading…
	
		Reference in a new issue
	
	 Bc. Petr Pecha
						Bc. Petr Pecha