在Django生产教程上提供静态文件

时间:2011-04-22 14:49:33

标签: django static nginx lighttpd cherokee

有没有人有关于在Django制作应用程序上提供静态文件的简单分步教程?我读了Django docs,听起来真的很复杂......我正在尝试使用不同的服务器(如lighttpd,nginx或cherokee)来提供静态文件的路径,但是设置它们对我来说都是希腊语。我下载了lighttpd,试图按照说明安装,并在几秒钟内收到错误。缺少这个或那个或者诸如此类的东西......我不是UNIX专家,而且我不擅长C / C ++,所以这一切./configure和MAKE安装对我来说都是胡言乱语...所以我想我的即时问题是:

  1. 您建议使用哪种服务器来提供易于安装且易于维护的静态文件?
  2. 假设我确实让服务器启动并运行,那么什么?如何告诉Django在其他服务器上查找文件?
  3. 同样,任何人都有分步教程吗?
  4. 非常感谢!

3 个答案:

答案 0 :(得分:4)

抱歉,没有一步一步的教程。但这里有一个可能有所帮助的高级概述:

  1. 你可能想要使用Apache服务器(http://httpd.apache.org/)这附带了大多数* nix发行版。
  2. 然后你想使用mod python(或者作为评论者指出mod_wsgi:http://docs.djangoproject.com/en/dev/howto/deployment/modwsgi/)连接到Django:http://docs.djangoproject.com/en/dev/howto/deployment/modpython/?from=olddocs。完成此步骤后,Apache现在面向Django。
  3. 接下来,您希望将Django中的静态文件收集到一个目录中,并在该目录中指向apache。如果使用django.contrib.staticfiles(http://docs.djangoproject.com/en/dev/howto/static-files/。)
  4. ,可以使用./manage.py collectstatic执行此操作。

    所以诀窍是你没有告诉Django将服务静态文件委托给特定的服务器。相反,你告诉httpd哪些网址是通过Django提供的,以及哪些网址是静态文件。

    另一种说法是所有请求都来自Apache Web服务器。根据您在httpd.conf中指定的规则,Web服务器将决定请求是针对静态文件还是针对django生成的动态文件。如果它是静态文件,它将只提供文件。如果请求是针对动态文件的,它将通过modpython将请求传递给Django。

    希望有所帮助。

答案 1 :(得分:1)

在开发中:

  • STATICFILES_DIRS应该包含所有静态文件所在的静态目录

  • STATIC_URL应为" / static /"如果你的文件在本地机器上,否则把基本URL放在这里,例如" http://example.com/"

  • INSTALLED_APPS应包含' django.contrib.staticfiles'

在模板中,加载staticfiles模块:

{% load staticfiles %}
..
..
<img src='{% static "images/test.png" %}' alt='img' />

生产中:

  • 添加&#34; STATIC_ROOT&#34; django用来收集来自&#34; STATICFILES_DIRS&#34;的所有静态文件。对它

  • 收集静态文件

$ python manage.py collectstatic

  • 将路径添加到urls.py

from . import settings .. .. urlpatterns = patterns('', .. url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root':settings.STATIC_ROOT)}),)

下面列出了更详细的文章:

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

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

答案 2 :(得分:0)

已更新urls.py

对于Django 3.0.7,url(....)格式在urls.py中不再起作用。

您需要执行以下操作:

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

参考:https://docs.djangoproject.com/en/3.0/howto/static-files/