【问题标题】:Serve multiple Django static directories with Apache使用 Apache 服务多个 Django 静态目录
【发布时间】:2015-05-20 22:49:30
【问题描述】:

有没有办法从 Apache 提供 2 个或更多静态目录?我正在使用 Django,它适用于 1 个静态路径;当我输入 2 时,它会忽略第二个。

我不想使用集体静态。只是试图设置我的开发环境,我喜欢将我的静态数据分别保存在每个应用程序中。我知道在生产中这会改变。

这是我的 Apache httpd.conf 代码:

#games app
Alias /static/ "C:/nerd_project/nerd/games/static/"
<Directory "C:/nerd_project/nerd/games/static">
Require all granted
</Directory>

#ice_cream app
Alias /static/ "C:/nerd_project/nerd/ice_cream/static/"
<Directory "C:/nerd_project/nerd/ice_cream/static">
Require all granted
</Directory>

游戏应用程序有效; CSS 和图片加载

ice_cream 应用无法加载并被忽略

【问题讨论】:

    标签: django apache httpd.conf


    【解决方案1】:

    您正在尝试将相同的 URL 路径 /static/ 别名到两个目录。这就是它失败的原因。

    Django 在Serving static files during development. 上有很好的文档

    检查 STATICFILES_DIRS 设置文档以提供来自多个目录的静态文件。

    如果您尝试为多个静态项目提供服务,您可以考虑使用 VirtualHost。

    【讨论】:

    • 您是在尝试为多个站点或单个站点提供多个应用程序吗?
    • 这也适用于静态文件服务视图。来自文档:“此设置定义了静态文件应用程序在启用 FileSystemFinder 查找器时将遍历的其他位置,例如,如果您使用 collectstatic 或 findstatic 管理命令或使用静态文件服务视图
    • 您可以为任意多个目录设置别名。问题在于相同的 URL 路径。
    • 是的,2 个或更多目录。静态视图内置django.contrib.staticfiles.views.serve() 视图。再次检查第一个链接上的文档。
    • 是的,开发过程中不需要 apache 位。
    【解决方案2】:

    直到今天早上我也遇到了同样的问题并登陆此页面以了解我的静态文件配置失败的原因。

    您可以为具有多个静态位置的多个应用提供服务。 看看我如何运行两个 Flask 应用程序和一个 Django 应用程序,并从不同位置为所有人提供静态文件。

    服务器名称 ec2-52-20-211-238.compute-1.amazonaws.com

    # logs configuration
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    
    WSGIDaemonProcess aira  threads=5
    WSGIScriptAlias /aira /var/www/aira/aira/aira/aira.wsgi
    Alias /aira/static/ /var/www/aira/aira/aira/static/
    <Directory /var/www/aira/aira/aira/>
      Order allow,deny
      Allow from all
    </Directory>
    
    WSGIDaemonProcess ama threads=5
    WSGIScriptAlias /ama /var/www/AMA/ama.wsgi
    Alias /ama/static/ /var/www/AMA/static/
    <Directory /var/www/AMA>
      Order allow,deny
      Allow from all
    </Directory>
    
    WSGIDaemonProcess realestatesurvey threads=5
    WSGIScriptAlias /RealEstateSurvey /var/www/RealEstateSurvey/mydata/wsgi.py
    Alias /RealEstateSurvey/static/ /var/www/RealEstateSurvey/mydata/static/
    <Directory /var/www/RealEstateSurvey/mydata/static>
      Order allow,deny
      Allow from all
    </Directory>
    

    对于烧瓶模板只需使用 对于 Django: STATIC_URL = '/RealEsatateSurvey/static' 在 html 文件中:-

    【讨论】:

      【解决方案3】:

      我可以提供一种更简单的方法来解决我最近了解到的这个问题。

      如果您不想使用 Nginx 或 apache 提供静态文件,而是从不同的应用程序或文件夹提供静态文件,您可以在虚拟环境中安装一个名为 whitenoise 的 pip 模块。

      请参考:whitenoise docs

      然后在你的 settings.py 文件中的 sessionmiddleware 之前添加这个 middlware。

      MIDDLEWARE = [
      'django.middleware.security.SecurityMiddleware',
      'whitenoise.middleware.WhiteNoiseMiddleware', # Serve static in production without nginx or apache
      'django.contrib.sessions.middleware.SessionMiddleware',
      ........
      ]
      

      最后,您可以从 httpd.conf 文件中删除那些用于渲染静态文件的 Alias 语句。进行迁移并重新启动服务器,您的问题将得到解决。

      【讨论】:

        【解决方案4】:

        我确切地知道使用 Apache 为多个静态目录提供服务需要做什么。

        此页面https://docs.djangoproject.com/en/1.8/howto/static-files/ 提到了这一点:

        “此外,这个辅助函数只服务于实际的 STATIC_ROOT 文件夹;它不像 django.contrib.staticfiles 那样执行静态文件发现。”

        在 urls.py 中添加 + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 不会加载 css 和图像。您必须仔细阅读并转到此页面:

        https://docs.djangoproject.com/en/1.8/ref/contrib/staticfiles/#django.contrib.staticfiles.views.serve

        我在我的 urls.py 中添加了以下内容,现在它可以工作了:

        from django.conf import settings
        from django.contrib.staticfiles import views
        
        if settings.DEBUG:
            urlpatterns += [
                url(r'^static/(?P<path>.*)$', views.serve),
            ]
        

        我只是在 Apache 的 httpd.conf 文件中注释掉了指向 2 个静态目录的别名和目录。 当然,这仅适用于开发服务器,因为我喜欢在每个应用程序中保留我的静态数据。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-04-17
          • 2014-07-07
          • 2012-06-05
          • 2010-10-14
          • 2014-05-13
          • 1970-01-01
          • 2018-04-14
          相关资源
          最近更新 更多