Retour sur les médias et fichiers statiques en mode développment
Bonjour,
Je reviens sur un concept ! :)
Ce que je fais habituellement.
il faut bien gérer les statiques ET médias en mode dev
urlpatterns = [
path('admin/', admin.site.urls),
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
Mais j'ai trouvé quelque chose d'intéressant dans le code de Wagtail (qui fait référence au code de Django) qui me dit qu'on pourrtait faire autrement :
urlpatterns = [
path('admin/', admin.site.urls),
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += staticfiles_urlpatterns()
La fonction dans le détail:
urlpatterns = []
def staticfiles_urlpatterns(prefix=None):
"""
Helper function to return a URL pattern for serving static files.
"""
if prefix is None:
prefix = settings.STATIC_URL
return static(prefix, view=serve)
# Pour moi ça revient au même que faire static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) tant qu'on ne passe rien à prefix
# Only append if urlpatterns are empty -- Je ne comprends pas pourquoi ils mettent ça... ?
if settings.DEBUG and not urlpatterns:
urlpatterns += staticfiles_urlpatterns()
Si je vais regarder dans serve:
def serve(request, path, insecure=False, **kwargs):
"""
Serve static files below a given point in the directory structure or
from locations inferred from the staticfiles finders.
To use, put a URL pattern such as::
from django.contrib.staticfiles import views
path('<path:path>', views.serve)
in your URLconf.
It uses the django.views.static.serve() view to serve the found files.
"""
if not settings.DEBUG and not insecure:
raise Http404
normalized_path = posixpath.normpath(path).lstrip("/")
absolute_path = finders.find(normalized_path)
if not absolute_path:
if path.endswith("/") or path == "":
raise Http404("Directory indexes are not allowed here.")
raise Http404("'%s' could not be found" % path)
document_root, path = os.path.split(absolute_path)
return static.serve(request, path, document_root=document_root, **kwargs)
Donc en pratique on peut utiliser les deux manières ! A moins d'avoir loupé quelque chose...
Merci d'avance !
Salut Gab !
Je ne m'en ferais pas trop par rapport à la façon qu'a Wagtail de gérer ça, perso je te conseille de suivre la façon indiquée dans la documentation, et après dans la pratique chaque projet est différent, il y a plein de façons en production par la suite de servir les fichiers statiques et media (sur ton serveur, sur un CDN, avec whitenoise, etc etc).
De ce que je vois effectivement du code que tu as mis je ne vois pas trop de différence avec ce que fait Django 🤔
Inscris-toi
(c'est gratuit !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte