Donc, je répète un site Web basé à Django qui permet aux utilisateurs de sélectionner un jeu de couleurs via une interface d'administration. P>
J'ai déjà des processeurs de middleware / de contexte qui relie la demande actuelle (basée sur le domaine) sur le compte. P>
Ma question est de savoir comment servir de manière dynamique le CSS avec le jeu de couleurs personnalisé du compte. p>
Je vois deux options: p>
Ajoutez un bloc CSS au gabarit de base qui remplace les styles avec des variables passées via un processeur de contexte. p> li>
Utilisez une URL personnalisée (par exemple "/ statique / dynamique / css / Je suis content de l'une ou l'autre option, mais je vous demandais si quelqu'un d'autre est traité avec des problèmes similaires et pourrait donner un aperçu de «meilleures pratiques». P>
4 Réponses :
Nice question.
Je suggérerais de pré-générer le fichier CSS après l'enregistrement du schéma de couleurs. Cela aurait un impact positif sur la mise en cache et le temps de chargement global de la page. Vous pouvez stocker vos fichiers CSS dans le répertoire Vous pouvez aussi Faites le truc avec un nombre aléatoire ou une date aléatoire du nom de fichier CSS strong> pouvant être modifié chaque fichier de temps est enregistré. Grâce à ce navigateur chargera le fichier immédiatement en cas de modifications. P> mise à jour: exemple d'utilisation du modèle pour améliorer cet exemple
Pour rendre la gestion de ces fichiers faciles, vous pouvez créer un modèle simple (un par utilisateur): p> / media / CSS / personnalisé /
/ média / css / personnalisé /
class UserCSS(models.Model):
bg_color = models.CharField(..)
...
...
pourrait générer le CSS et le stocker dans un champ de texte dans le même modèle que le profil / paramètres utilisateur. Pourrait alors avoir une vue pour les recréer si vous changez de style. Ensuite, faites votre option 1 ci-dessus. p>
Je créerais une clé MD5 avec les éléments de thème, stockez cette touche dans le profil utilisateur et créez un fichier CCS nommé d'après cette touche MD5: vous gagnez l'accès du fichier statique et la détection automatique du changement de thème. P>
J'ai utilisé l'option n ° 2 avec succès. Il existe 2 méthodes décentes de mettre à jour les fichiers statiques générés que je connais: p>
Utilisez une version QueryString comme /Special_Path.CSS?v=11452354234 où le paramètre V est généré à partir d'un champ de base de données, de la touche MEMCACHED ou d'un autre fichier persistant. La version est mise à jour par admin ou pour le développement, vous ne gagneriez pas la génération non enregistrée si le paramètre était quelque chose de spécial comme v = -1. Vous aurez besoin d'un processus pour nettoyer les vieilles générations après un certain temps. P> Li>
n'utilise pas de requête de version, mais devez-la avoir l'air d'abord pour le fichier généré, s'il ne le trouve pas, il le génère. Vous pouvez créer une application Cron Emploi ou WSGI qui recherche les modifications du système de fichiers pour le développement et dispose d'un crochet de votre panneau d'administration qui supprime des générations après une mise à jour. Voici un exemple de surveillance que vous devriez convertir pour être spécifique à vos générations et non à Django. http://code.google.com/p/ MODWSGI / Wiki / RechargerSourcode # Suivi% 5FFOR% 5FCODE% 5FCANGES P> LI> ol>
Au fait, je ne recommande pas de faire fonctionner le moniteur dans une application de production, juste pour être clair. Ce serait un tueur de performance.
Merci, je vais aller avec # 1 avec certains des conseils mentionnés par d'autres.
En passant, cette méthode se prête bien à un mécanisme de remplacement variable, car vous traiterez de toute façon le CR .CSS avec Python. Si ce n'est pas seulement FreeForm CSS, et vous avez une liste de propriétés connue, vous pouvez les transmettre à un fichier CSS de modèle qui remplace de manière dynamique avec tout ce qui est dans la base de données. Bonne chance!
Yup, c'est exactement ce que je faisais. Je crée cela comme une application réutilisable qui traite de la stratégie de marque pour gérer les logos, les couleurs, les modèles, etc. sur une base de domaine / sous-domaine. Je prévois de le libérer comme source ouverte lorsqu'il devient "fonctionnel", mais c'est un projet latéral, il peut donc être un moment. Merci pour l'aide et les bons voeux!
Cela doit-il être à la volée? La personnalisation pourrait produire un fichier .CSS qui est stocké par utilisateur et que les pages pourraient indiquer que le fichier .CSS.
@DRFrogsPlat: Merci pour le commentaire. Le problème de cette approche dans ma situation est si je devais ajouter un nouveau style, je devais passer et supprimer et recréer chaque fichier CSS.