当前位置: 首页 > 知识库问答 >
问题:

Django管道未在开发模式下提供文件

冯泓
2023-03-14

我试图用django管道编译静态,但无法在开发模式下为静态服务。由于我不是Django开发人员,我可能对Django为静态文件本身提供服务的方式有所误解。这是我的项目结构:

  • 项目(项目本身)
  • css
    • 应用程序。斯蒂尔
    • 媒体

    当我使用共享静态时,我已经指定了STATICFILES_DIRS指令来允许Django dev server和CollectSTA命令查找共享静态:

    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'static'),
    ]
    

    这是我的settings.py

    # for production, should be served via nginx
    STATIC_ROOT= os.path.join(BASE_DIR, 'public/static/')
    # prefix for static app
    STATIC_URL = '/static/'
    
    # also django-pipeline config
    STATICFILES_FINDERS = (
        'django.contrib.staticfiles.finders.FileSystemFinder',
        'django.contrib.staticfiles.finders.AppDirectoriesFinder',
        'pipeline.finders.PipelineFinder',
    )
    STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'
    
    PIPELINE = {
        'PIPELINE_ENABLED': True,
        'COMPILERS': (
            'pipeline.compilers.stylus.StylusCompiler',
        ),
        'STYLESHEETS': {
            'app': {
                'source_filenames': (
                  'css/app.styl',
                ),
                'output_filename': 'css/app.css',
            },
        },
    }
    

    在我的模板中,我指定了CSS组:

      {% load pipeline %}
      {% stylesheet 'app' %}
    </head>
    

    因此,生成这样的HTML:

      <link href="/static/css/app.css" rel="stylesheet" type="text/css" />
    </head>
    

    但返回404。

    如果我运行的集合静态公共/静态/css/app.css被构建。但是正如我所理解的Django逻辑,它只用于基于apache/nginx的生产服务,而不是开发一。在开发模式下,静态通过内部Django服务器和一些中间件django管道钩子提供服务。

    我做错了什么?谢谢你的帮助。

    UPD:我在全局urlpatterns中添加了static(settings.static\u URL,document\u root=settings.static\u root),但是我不理解为什么推荐它-static\u root仅用于外部代理服务器的生产,而不用于Django本身。还是不?

共有2个答案

卢雅惠
2023-03-14

问题作者的原始答案很好,但在我看来,您不需要手动完成。您可以将此开关与单个ifelse条件控制一起使用。

丰景同
2023-03-14

对每个人来说,都在为同样的问题而斗争。只需从django管道配置中删除'PIPELINE\u ENABLED':True、。在此之后,django管道将在开发模式下为每个请求重新编译静态。

而在部署之前,只需运行CollectSteest并设置DEBUG=False,正如文档中提到的那样。在这个管道将停止为每个请求重新编译文件后,在模板中加载缩小的资产,您将能够使用任何第三部分代理服务器(如NGINX)从STATIC_ROOT提供静态服务。

 类似资料:
  • 问题内容: 我在Nginx后面的远程服务器上有django 1.3。 如果我用apache + mod_wsgi运行django,我可以在apache日志文件中观察错误。可以,但我想在控制台中使用。 如果运行django自己的开发服务器,则仅当DEBUG = False时,控制台中的stacktrace才会出现错误。在调试模式下,控制台输出 我想弄清楚为什么?django为什么只输出未命名的Exc

  • 问题内容: 我是Django的新手,我仍在尝试掌握其功能。我使用Django 1.4.2创建了一个非常简单的项目,该项目的索引页面具有简单的形式,你可以在其中输入内容,结果页面在提交后显示输入内容(下面的代码)。 提交后,我收到错误403和以下消息: index.html result.html views.py 我已经研究了Internet上的文档和各种示例,但是我不明白自己在做什么错。如果我在

  • 问题内容: 我希望站点上的用户能够下载路径被遮盖的文件,以便不能直接下载它们。 例如,我希望URL如下所示: http://example.com/download/?f=somefile.txt 在服务器上,我知道所有可下载文件都位于文件夹中。 有没有一种方法可以使Django提供该文件供下载,而不是尝试查找URL和查看以显示它? 问题答案: 对于“两全其美”,你可以将S.Lott的解决方案与x

  • 问题内容: 这个问题已经被回答了好几次了,我已经看到了几乎所有相关的帖子,但是无法加载CSS文件。我在我的项目中有以下结构:中,我有以下代码: 在urls.py中,我有以下代码: 我在模板中使用它 我在做什么错?我应该做什么?例如应该在中添加任何内容?或在的设置中?请假设我是一个绝对的初学者。我真的需要一个答案。谢谢。 问题答案: 什么都不做的装饰器类如下所示: 然后您可以正常应用它:

  • 问题内容: 我希望站点上的用户能够下载路径被遮盖的文件,以便不能直接下载它们。 例如,我希望URL如下所示: http://example.com/download/?f=somefile.txt 在服务器上,我知道所有可下载文件都位于文件夹中。 有没有一种方法可以使Django提供该文件供下载,而不是尝试查找URL和查看以显示它? 问题答案: 你可以将的解决方案与模块结合使用:生成文件(或文件本

  • 问题内容: 让我感谢Stack Overflow社区的人们帮助我解决了各种Django和Apache(带有mod_wsgi)错误。到目前为止,我已经问了5个相关的问题,现在我越来越接近在生产站点上发布内容了! 我读到有关,(很快就会过时),并在Apache配置中设置。我试图逐个测试每个解决方案,但是我什么也做不了。 这是我的管理网站现在的样子 我也有一个奇怪的情况,那就是 任何子 域都可以在我的服