Dans une application Django, une couleur est attribuée à chaque "membre" pour l'aider à s'identifier. Cette couleur est stockée dans la base de données, puis imprimée/copiée dans le code HTML lorsque cela est nécessaire. Le seul problème est que je ne sais pas comment générer des couleurs aléatoires. Hex
couleurs en python/django. Il est assez facile de générer des couleurs RVB, mais pour les stocker, je devrais soit a) créer trois colonnes supplémentaires dans mon modèle "Membre", soit b) les stocker toutes dans la même colonne et utiliser des virgules pour les séparer, puis, plus tard, analyser les couleurs pour le HTML. Aucune de ces solutions n'est très attrayante, donc, encore une fois, je me demande comment générer des couleurs aléatoires. Hex
couleurs en python/django.
Réponses
Trop de publicités?Voici un moyen simple :
import random
color = "%06x" % random.randint(0, 0xFFFFFF)
Pour générer une couleur aléatoire de 3 caractères :
import random
color = "%03x" % random.randint(0, 0xFFF)
%x
dans les langages basés sur le C est un formateur de chaînes qui formate les entiers en chaînes hexadécimales, tandis que 0x
est le préfixe permettant d'écrire les nombres en base 16.
Les couleurs peuvent être préfixées par "#" si nécessaire (style CSS)
La stocker en tant que valeur de couleur HTML :
Mise à jour : accepte désormais les arguments entiers (0-255) et flottants (0.0-1.0). Ceux-ci seront limités à leur plage autorisée.
def htmlcolor(r, g, b):
def _chkarg(a):
if isinstance(a, int): # clamp to range 0--255
if a < 0:
a = 0
elif a > 255:
a = 255
elif isinstance(a, float): # clamp to range 0.0--1.0 and convert to integer 0--255
if a < 0.0:
a = 0
elif a > 1.0:
a = 255
else:
a = int(round(a*255))
else:
raise ValueError('Arguments must be integers or floats.')
return a
r = _chkarg(r)
g = _chkarg(g)
b = _chkarg(b)
return '#{:02x}{:02x}{:02x}'.format(r,g,b)
Résultat :
In [14]: htmlcolor(250,0,0)
Out[14]: '#fa0000'
In [15]: htmlcolor(127,14,54)
Out[15]: '#7f0e36'
In [16]: htmlcolor(0.1, 1.0, 0.9)
Out[16]: '#19ffe5'
Cela a déjà été fait par le passé. Plutôt que de l'implémenter vous-même, en introduisant éventuellement des erreurs, vous pouvez utiliser une bibliothèque prête à l'emploi, par exemple Faussaire . Jetez un coup d'œil sur le site fournisseurs de couleurs et en particulier hex_digit
.
In [1]: from faker import Factory
In [2]: fake = Factory.create()
In [3]: fake.hex_color()
Out[3]: u'#3cae6a'
In [4]: fake.hex_color()
Out[4]: u'#5a9e28'
- Réponses précédentes
- Plus de réponses