serving static files on Django production tutorial

大城市里の小女人 提交于 2019-12-23 09:09:40

问题


Does anyone have a simple step-by-step tutorial about serving static files on a Django production app? I read the Django docs and it sounds really complicated... I'm trying to go the route of serving static files using a different server like lighttpd, nginx, or cherokee, but setting these up is all Greek to me. I downloaded lighttpd, tried to follow the instructions to install, and within a few seconds got an error. Missing this or that or whatnot... I'm not a UNIX whiz and I'm not very good at C/C++, so all this ./configure and MAKE install are gibberish to me... So I guess my immediate questions are:

  1. Which server would you recommend to serve static files that's easy to install and easy to maintain?
  2. Assuming I actually get the server up and running, then what? How do I tell Django to look for the files on that other server?
  3. Again, anyone has step-by-step tutorials?

Thanks a lot!


回答1:


Sorry, don't have a step by step tutorial. But here is a high level overview that might help:

  1. You probably want to go with the Apache server ( http://httpd.apache.org/) This comes with most *nix distributions.
  2. 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.
  3. 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.




回答2:


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:

  • http://blog.xjtian.com/post/52685286308/serving-static-files-in-django-more-complicated

  • http://agiliq.com/blog/2013/03/serving-static-files-in-django/



来源:https://stackoverflow.com/questions/5756614/serving-static-files-on-django-production-tutorial

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!