6
votes

Utilisation de l'URL relative vs absolue pour static_url à Django

Je tente de configurer les valeurs appropriées static_url et static_root pour un nouveau projet Django, et je rencontre un problème d'utilisation d'une URL absolue pour static_url.

Mon projet est structuré comme: < Pré> xxx

dans mes paramètres.py, j'ai xxx

si je définis static_url = '/ statique /' , alors je peux accéder à http: // localhost: 8000 / statique / css / personnalisé.css parfaitement.

Cependant, si j'utilise une URL absolue comme static_url = 'http: // localhost: 8000 / statique /' , comme si j'utilisais un CDN, alors http: // localhost: 8000 / statique / CSS / Custom.CSS retourne un 404 Erreur.

Ne devriez-vous pas être efficacement identique? Docs état static_url peut être absolu. Pourquoi le paramètre ultérieur ne parvient-il pas à charger des supports statiques?


0 commentaires

3 Réponses :


6
votes

Je viens de tester la même chose, en utilisant http: // localhost: 8000 / statique / code> ne fonctionne pas pour moi non plus.

Dans mes paramètres, je garde une variable de développement, ainsi de suite Localhost L'URL est '/ statique /' et quand je suis déployé (et je définis développement = false code>), c'est une URL complète. P>

if DEVELOPMENT == True:
    STATIC_URL = '/static/'
else:
    STATIC_URL = 'https://www.mywebsite.com/static/'


1 commentaires

J'ai fini par faire quelque chose de similaire, mais j'ai changé en fonction du nom d'utilisateur du processus, donc je n'avais pas à craindre de définir une variable.



3
votes

Je suppose que vous utilisez la fonction statique du django.conf.urls.static pour servir vos fichiers statiques dans l'environnement de développement (ce qui signifie Debug = true ). Maintenant que vous pouvez lire dans la documentation, cette fonction ne fonctionne pas avec les URL absolues avec débogage activé.

Donc de la DOCS:

https: // docs .djangoproject.com / FR / Dev / HOWTO / STATIC-Fichiers / # Serving-Static-Files-Pendant le développement

"Cette fonction d'aide ne fonctionne que dans le mode de débogage et uniquement si le préfixe donné est local (par exemple / statique /) et non une URL (par exemple, http://static.example.com/ ). "


0 commentaires

0
votes

La cause et la solution étaient simples, mais la découverte qu'il était inincutrice basée sur la manière dont j'ai décrit le problème. Je n'ai pas mentionné que mon absolu static_url avait un domaine différent ( http: // localMedia: 8000 / statique / http: // localhost: 8000 / statique / ).

Je faisais cela dans le cadre d'un hack pour simplifier l'hébergement des médias parmi plusieurs machines de développement de développement externes que j'utilisais pour tester diverses versions de IE.

Cependant, lorsqu'il y a une inadéquation entre le domaine dans static_url et Domaine local de RunServer, Django ne sert que le contenu de static_root et ne tente pas de récupérer les médias des dossiers d'applications . Je ne sais pas pourquoi, mais c'est comme ça.

Si je rencontrais gérer.py colleckstatic , il corrige efficacement l'erreur 404 en copiant tous les médias de dossier de l'application dans mon statique_root. Sinon, je pourrais simplement utiliser le même domaine dans mon static_url et Django trouverait automatiquement tout support non collecté dans les dossiers d'applications.


0 commentaires