6👍
Sorry, don’t have a step by step tutorial. But here is a high level overview that might help:
- You probably want to go with the Apache server ( http://httpd.apache.org/) This comes with most *nix distributions.
- You then want to use mod python (or as the commenter pointed out mod_wsgi: http://docs.djangoproject.com/en/dev/howto/deployment/modwsgi/) to connect to Django : http://docs.djangoproject.com/en/dev/howto/deployment/modpython/?from=olddocs. Once you complete this step, Apache is now fronting for Django.
- Next you want to collect the static files in your Django into one directory and point apache at that directory. You can do this using the the ./manage.py collectstatic if you used django.contrib.staticfiles (http://docs.djangoproject.com/en/dev/howto/static-files/.)
So the trick is you’re not telling Django to delegate serving static files to a specific server. Rather you’re telling httpd which urls are served via Django and what urls are static files.
Another way of saying this is that all requests come to the Apache web server. The webserver, according to the rules you specify in httpd.conf, will decide whether the request is for a static file or whether it is for a dynamic file generated by django. If it for a static file it will simply serve the file. If the request is for a dynamic file it will, via modpython, pass the request to Django.
Hope that helps.
4👍
With the latest Django version like Django 3.2.6 I was having issues serving media and static files both in the dev and prod environment while DEBUG = False
.
So I got around a solution that came from multiple stack overflow posts.
- Import appropriate functions to
urls.py
from django.urls import include, path, re_path
from django.views.static import serve
- Define static URL pattern list to
urls.py
static_urlpatterns = [
re_path(r"^media/(?P<path>.*)$", serve, {"document_root": settings.MEDIA_ROOT}),
re_path(r"^static/(?P<path>.*)$", serve, {"document_root": settings.STATIC_ROOT}),
]
Assuming your STATIC_ROOT
and MEDIA_ROOT
is already defined in settings.py
file
- Just include
static_urlpatterns
inurlpatterns
urlpatterns = [
path("admin/", admin.site.urls),
path("api/", include(api_urlpatterns)),
path("", include(static_urlpatterns)),
]
Hope it works for you both in the dev and prod environment when DEBUG = FALSE
. Thank you.
3👍
Development
STATICFILES_DIRS
should have all static directories inside which all static files are resident.
STATIC_URL
should be /static/
if your files are in local machine otherwise put the base URL here e.g. http://example.com/
.
INSTALLED_APPS
should include django.contrib.staticfiles
.
In the template, load the staticfiles module:
{% load staticfiles %}
<img src='{% static "images/test.png" %}' alt='img' />
Production
Add STATIC_ROOT
that is used by Django to collect all static files from STATICFILES_DIRS
to it.
Collect static files:
$ python manage.py collectstatic
Add the path to urls.py:
from . import settings
urlpatterns = patterns('',
..
url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root':settings.STATIC_ROOT)}),)
More detailed articles are listed below:
1👍
Updated for urls.py
the url(....)
format doesn’t work anymore in urls.py
for Django 3.0.7.
you need to do then:
urls.py
:
from django.conf import settings # to import static in deployment
from django.conf.urls.static import static # to import static in deployment
....
urlpatterns = [
....
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) # to import static in deployment
Reference: https://docs.djangoproject.com/en/3.0/howto/static-files/
- Django 'resolve' : get the url name instead of the view_function
- How do I get Django forms to show the html required attribute?
- Django rest auth email instead of username
- Annotate django query if filtered row exists in second table
- Display list of all tests in a Django project