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

在Django产品教程上提供静态文件,django,static,nginx,lighttpd,cherokee,Django,Static,Nginx,Lighttpd,Cherokee,有人有关于在Django生产应用程序上提供静态文件的简单分步教程吗?我读了《Django》,听起来很复杂。。。我正在尝试使用不同的服务器(如lighttpd、nginx或cherokee)来提供静态文件,但设置这些服务器对我来说完全是一窍不通。我下载了lighttpd,试图按照说明进行安装,几秒钟之内就出现了一个错误。错过这个或那个什么的。。。我不是UNIX高手,也不擅长C/C++,所以所有这些./configure和makeinstall对我来说都是胡言乱语。。。所以我想我现在的问题是: 您建

有人有关于在Django生产应用程序上提供静态文件的简单分步教程吗?我读了《Django》,听起来很复杂。。。我正在尝试使用不同的服务器(如lighttpd、nginx或cherokee)来提供静态文件,但设置这些服务器对我来说完全是一窍不通。我下载了lighttpd,试图按照说明进行安装,几秒钟之内就出现了一个错误。错过这个或那个什么的。。。我不是UNIX高手,也不擅长C/C++,所以所有这些./configure和makeinstall对我来说都是胡言乱语。。。所以我想我现在的问题是:

  • 您建议哪台服务器提供易于安装和维护的静态文件
  • 假设我真的启动并运行了服务器,那又怎么样?我如何告诉Django在另一台服务器上查找文件
  • 再说一次,有人有循序渐进的教程吗

  • 非常感谢

    对不起,没有分步教程。但这里有一个高层次的概述可能会有所帮助:

  • 您可能希望使用Apache服务器()这是大多数*nix发行版附带的
  • 然后,您需要使用mod python(或者正如评论员指出的mod_wsgi:)连接到Django:。完成这一步后,Apache现在将面向Django
  • 接下来,您需要将Django中的静态文件收集到一个目录中,并将apache指向该目录。如果使用django.contrib.static文件,则可以使用./manage.py collectstatic来完成此操作(http://docs.djangoproject.com/en/dev/howto/static-files/.)
  • 因此,诀窍在于,您没有告诉Django将静态文件的服务委托给特定的服务器。而是告诉httpd哪些url是通过Django提供的,哪些url是静态文件

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

    希望这能有所帮助。

    发展
    STATICFILES\u DIRS
    应该包含所有静态文件所在的所有静态目录

    STATIC\u URL
    应该是
    /STATIC/
    ,如果您的文件在本地计算机中,否则请将基本URL放在这里,例如
    http://example.com/

    安装的应用程序应包括
    django.contrib.staticfiles

    在模板中,加载staticfiles模块:

    {% load staticfiles %}
    <img src='{% static "images/test.png" %}' alt='img' />
    
    将路径添加到url.py

    from . import settings
    
    urlpatterns = patterns('',
    ..
        url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root':settings.STATIC_ROOT)}),)
    
    来自。导入设置
    urlpatterns=模式(“”,
    ..
    url(r'^static/(?P.*)','django.views.static.service',{'document\u root':settings.static\u root)})
    
    更详细的文章如下:


    为URL.py更新

    Django 3.0.7的
    url(..)
    格式在
    url.py
    中不再适用

    然后您需要执行以下操作:

    url.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
    

    参考资料:

    您在找这个吗?hhttp://docs.djangoproject.com/en/1.3/howto/static-files/ 这似乎是一步一步的。是的,我读过那个医生。我觉得不够详细。例如,这里有我的第二个问题的答案吗?我可能错过了。。。。谢谢@拉比:在重新阅读了你的问题(这是相当令人困惑的)之后,我认为这是错误的链接。很抱歉让人困惑@拉比:不要道歉。解决这个问题。简化集中现在,wsgi或uwsgi绝对是首选的方式。mod_python速度很慢,很快将不受支持。谢谢你的回复。是的,我明白你的意思。我从Django官方文件中读到了很多。看起来您正在描述如何通过Apache为应用程序本身提供服务。你是说也要通过Apache提供静态文件吗?我想医生说那不是推荐的路线。你觉得可以吗?我选择的路径是通过不同的服务器(如lighttpd或cherokee)提供静态文件。然而,我对从源代码进行制作和安装以及手动配置一切都感到不舒服。我也不知道lighttpd/cherokee会如何与我的Django应用程序交谈。@rabbid:从Apache提供静态媒体服务没问题——你不想做的是使用Django的开发服务器为你的应用程序及其媒体提供服务。@mipadi:当然,我不会在生产中使用开发服务器。我想我会先尝试从同一个Apache服务器提供静态文件。谢谢@rabbid:我认为文档实际上告诉您使用Apache来服务器静态文件。它们告诉您不要在生产环境中使用开发服务器,也不要通过Django为静态文件提供服务器。
    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