2010-04-02 4 views
0

ayant un modèle similaire:SORL-miniature et de renommer le fichier

class Foo(models.Model): 
    slug = models.SlugField(unique=True) 
    img = ImageWithThumbnailsField(upload_to='uploads/',thumbnail={'size': (56, 34)}) 

Il fonctionne très bien, mais je veux ajouter 2 autres fonctionnalités à elle:

1- Il devrait également générer une seconde miniature de taille 195x123 , en plus de 56x34

2- Lors de la sauvegarde de l'image originale du modèle et de ses deux miniatures, il faut renommer celle-ci en utilisant le slug.

Par exemple

Je suis et je 1.jpg L'ajout nommer limace comme "i-like-ce-pays2" j'enregistrer ces versions named doit être sauvé:

1- i-like-this-country2_original.jpg 
2- i-like-this-country2_middle.jpg #for 195x123 
3- i-like-this-country2_small.jpg #for 56x34 

Répondre

3

Première partie:

suffit de passer dans comme ceci: sizes=((56,34), (195,123),)

Deuxième partie:

Vous pouvez spécifier une fonction pour le upload_to que Django appellera, en lui passant une instance du modèle et le nom de fichier d'origine. Avec cela, vous pouvez mettre en place une fonction qui renomme le fichier en fonction du slug car Django utilisera tout ce que vous lui retournerez. code non testé, mais quelque chose comme ceci:

def _Foo_img_name(instance, filename): 
    # grab the extension 
    left_path, extension = self.file.name.rsplit('.',1) 

    # change the filename then return 
    return 'uploads/%s.%s' % (instance.slug, extension) 

class Foo(models.Model): 
    img = ImageWithThumbnailsField(upload_to=_Foo_img_name, ...) 

Je ne crois pas que vous pouvez faire est de changer le <filename>_56x34.jpg en tout sauf cela.

0

Tout ce que vous avez à faire est de créer une méthode dans votre models.py comme ceci:

def rename_file(instance, filename): 
    extension = filename.split(".")[1] 
    rename = "rename_here" 
    return rename + "." + extension 

Ensuite, dans la classe qui étend models.Model

class MyImage(models.Model): 
    image = ImageField(upload_to=rename_file) 

Ne pas oublier d'importer sorl.thumbnail import ImageField aussi!

Questions connexes