2017-09-07 1 views
0

J'ai créé un package d'application python personnalisé qui est un widget personnalisé que je peux utiliser dans mon projet Django. Le widget personnalisé est installé à partir de mes exigences.txt et peut être trouvé dans mon dossier d'environnement env/lib/python2.7/site-packages/custom_widget ... A l'intérieur il y a un dossier statique avec des fichiers js et css. L'objet forms.Widget lui-même est créé avec ses propres actifs blan .. voir ci-dessous:Django forms.media extrayant le média de l'application installée pip

css = { 
     'all': (
      'css/datatables/dataTables.bootstrap.css', 
      'css/custom-widget.css', 
     ), 
    } 
    js = (
     'js/plugins/datatables/jquery.dataTables.js', 
     'js/plugins/datatables/dataTables.bootstrap.js', 
     'js/custom-widget.js', 
    ) 

Le datatables et js sont css une version plus ancienne que celle de ceux dans le répertoire de mon projet Django. D'autres emplacements de mon projet Django utilisent des versions plus récentes de datatables. Lorsque j'utilise le widget dans une application de mon projet et que j'essaie d'inclure les assets de formulaire dans le template avec {{form.media}}, il extrait les dataTables css et js de mon répertoire staticfiles de Django Project plutôt que le répertoire statique défini sous mon widget personnalisé. C'est un problème car ce sont des versions différentes et mon widget ne se comporte pas correctement. Je me demande s'il existe un moyen de tirer mes actifs de l'application personnalisée qui a été installée pip plutôt que des fichiers statiques définis à partir de mes paramètres STATICFILES_DIRS

Répondre

1

Le répertoire des répertoires de l'application de fichiers statiques utilisera n'importe quel fichier correspondant - vous pouvez ne spécifiez pas quelle application vous voulez utiliser.

Vous pouvez déplacer les fichiers de widgets personnalisés de static vers static/custom_widget, puis mettre à jour la classe de médias pour inclure le nouveau préfixe.

css = { 
    'all': (
     'custom_widget/css/datatables/dataTables.bootstrap.css', 
     'custom_widget/css/custom-widget.css', 
    ), 
} 
js = (
    'custom_widget/js/plugins/datatables/jquery.dataTables.js', 
    'custom_widget/js/plugins/datatables/dataTables.bootstrap.js', 
    'custom_widget/js/custom-widget.js', 
) 
+0

oui merci, le problème était que les deux fichiers js DataTables différents (qui ont été le même nom) avaient des noms de chemin très similaires, la mise à jour de sorte que le chemin (en créant de nouveaux dossiers) et les médias à se pencher sur les dossiers était la solution – pyguy