2013-07-23 4 views
0

Mon URL expression régulière est r'^admin.*/static/admin/(?P<path>.*)$', maintenant il peut correspondre admin/static/admin/css/base.css ou admin/123/static/admin/js/actions.js, mais je veux correspondre à l'url admin/blog/post/static/static/admin/js/actions.js (maintenant il ne correspond pas)expressions régulières dans django url

Comment pourrais-je faire cela?

Merci pour les commentaires de tout le monde.

Mon problème est que je mis en place chemin url statique dans django pour stocker mon css/js, comme celui-ci url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT,}), settings.STATIC_ROOT est os.path.join(os.path.dirname(os.path.abspath(__file__)), 'static')

Mais quand j'accéder à l'interface d'administration, tous les css/fichiers js sont manquant . car le fichier admin css stocke dans django\contrib\admin\static\admin et son URL dans le fichier html est 'static/admin/css/base.css'. il n'y a pas ce fichier dans mon chemin statique que j'ai défini dans les paramètres.

Ma solution est définie une autre URL comme r'^admin.*/static/admin/(?P<path>.*)$', et définir la racine du document sur le chemin du fichier statique de l'administrateur django. mais juste comme je l'ai mentionné, quand je vais la page principale d'administration, tout est ok, mon quand je vais profondément comme page "ajouter l'utilisateur", le fichier css est toujours manquant.

J'ai également trouvé une solution est de changer mon URL régulier à r'.*/static/admin/(?P<path>.*)$', c'est bien pour tout, mais y at-il une meilleure solution? Après avoir exécuté collectstatic, dans mon chemin statique, je peux trouver le dossier admin et ses fichiers css/js. alors j'ai mis mon chemin d'URL à l'URL (r '^ admin/static/(? P. *) $', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}),, il fonctionne pour la page d'administration principale, mais quand j'accède à http://localhost/admin/sites/site/static/static/admin/js/admin/RelatedObje‌​ctLookups.js cela ne fonctionne toujours pas, comment pourrais-je écrire mon chemin d'URL?

+2

Quel est le problème que vous essayez de résoudre? –

+1

Pourquoi faire ceci, êtes-vous une chaîne pour mettre des fichiers statiques dans vos modèles web? –

+0

Je ne sais pas pourquoi cela ne correspond pas, je viens d'échapper les barres obliques, enlevé le nom du groupe de capture et cela fonctionne pour moi sur http://www.rubular.com/r/DlxE1mejvL –

Répondre

0

Le motif correspond très bien:

>>> import re 
>>> p = re.compile(r'^admin.*/static/admin/(?P<path>.*)$') 
>>> p.match("admin/blog/post/static/static/admin/js/actions.js").groups() 
('js/actions.js',) 

donc pas clair pourquoi cela n'a pas fonctionné pour vous. Avez-vous revérifié que l'URL problématique ne correspond pas à une autre regexp antérieure?

EDIT: Basé sur les mises à jour ci-dessus, il se peut que STATIC_URL ne soit pas correctement défini (une chaîne vide, peut-être?). Il doit pointer vers où les fichiers statiques sont servis (URL, pas répertoire) et doit se terminer par une barre oblique. Voir Settings: STATIC_URL.

(Et comme note de bas de page, vous devriez faire attention à ce que vos expressions rationnelles d'URL en fassent trop, vous n'êtes pas encore là avec celui-ci, mais l'article de ReDoS de Wikipédia est bon à lire avant de dépasser à faire ici.)