2011-04-22 63 views
3

有没有人有关于在Django制作应用上提供静态文件的简单分步教程?我读了Django docs,听起来真的很复杂......我试图使用lighttpd,nginx或cherokee等不同服务器来提供静态文件的路径,但设置这些对我来说都是希腊语。我下载了lighttpd,试图按照说明安装,并在几秒钟内出现错误。缺少这个或那个或者什么......我不是一个UNIX专家,我不擅长C/C++,所以所有这些./configure和MAKE安装对我来说都是胡言乱语......所以我想我的直接问题是:在Django制作教程上提供静态文件

  1. 你会推荐哪个服务器提供易于安装和易于维护的静态文件?
  2. 假设我确实让服务器启动并运行,那么是什么?我如何告诉Django在其他服务器上查找文件?
  3. 再次,任何人都有分步教程?

非常感谢!

+0

您是否正在寻找? hhttp://docs.djangoproject.com/en/1.3/howto/static-files/它似乎是一步一步的。 – 2011-04-22 14:55:05

+0

是的,我已阅读该文档。我没有发现它足够详细。例如,那里有我的第二个问题的答案吗?我可能错过了......谢谢! – rabbid 2011-04-22 15:30:50

+0

@rabbid:在重新阅读你的问题(这很让人困惑)后,我认为这是错误的链接。 – 2011-04-22 15:32:20

回答

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指向该目录。您可以使用该./manage.py collectstatic如果使用django.contrib.staticfiles做到这一点(http://docs.djangoproject.com/en/dev/howto/static-files/。)

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

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

希望有所帮助。

+1

wsgi或uwsgi绝对是现在的首选方式。 mod_python速度很慢,很快就不会受到支持。 http://docs.djangoproject.com/zh/dev/howto/deployment/modwsgi/ – Jordan 2011-04-22 15:06:21

+0

感谢您的回复。是的,我明白你的意思了。我从官方的Django文档中读到了很多。看起来您正在描述如何通过Apache为应用程序提供服务。你是否说要通过Apache提供静态文件?我认为医生说这不是一条推荐路线。你认为没关系?我选择的路线是通过不同的服务器(如lighttpd或cherokee)提供静态文件。但是,我不太愿意从源代码进行制作和安装,并且手动配置所有内容。我不知道lighttpd/cherokee如何与我的Django应用程序交谈.. – rabbid 2011-04-22 15:34:12

+0

@rabbid:服务Apache的静态媒体是很好的 - 您*不想*为您的应用程序及其媒体提供服务Django的开发服务器。 – mipadi 2011-04-22 15:41:54

0

在发展:

  • STATICFILES_DIRS应该有所有静态目录内的所有静态文件驻留

  • STATIC_URL应该是“/静态/”如果你的文件在本地机器上,否则把基地URL放在这里例如“http://example.com/

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

在模板中,加载staticfiles模块:

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

在制作:

  • 添加 “STATIC_ROOT” 所使用的Django的收集所有静态从“STATICFILES_DIRS”到它的文件

  • 收藏静态文件

$ 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/