【问题标题】:How to serve static files in Django development如何在 Django 开发中提供静态文件
【发布时间】:2012-03-25 15:15:56
【问题描述】:

这里是pf项目的目录结构。

mysite
  \media
  \static
       \images
       \css
           base.css
       \js 
  \templates
       base.html
  \settings.py #and other .py files

现在说如果我有一个文件C:\mysite\static\css\base.css 或一个图像C:\mysite\static\images\ball.png。我将如何使用 django 开发服务器来提供它。我知道这不是推荐的方式,但只是在开发中我希望它能够工作。我已阅读有关 stackoverflow 的文档和其他答案,但它们似乎不起作用。可能我被mediastaticurlpatterns 弄糊涂了。我花了几个小时试图解决这个问题,但仍然没有运气。 我是 django 的新手,在我看来,这一切只是为了让 css 或图像显示出来。 我需要进行哪些更改或编辑才能使其正常工作。我将如何在模板中引用图像和 css?

【问题讨论】:

    标签: django file static


    【解决方案1】:

    以下是来自Django documentation 的静态文件的操作方法,它将带您逐步完成整个过程。

    将以下内容添加到您的 urls.py

    from django.contrib.staticfiles.urls import staticfiles_urlpatterns
    
    # ... the rest of your URLconf goes here ...
    
    urlpatterns += staticfiles_urlpatterns()
    

    然后'当您使用内置的 runserver 管理命令时,此视图将自动启用并在 STATIC_URL 处提供您的静态文件。 ...这将检查您的 STATIC_URL 设置并连接视图以相应地提供静态文件。不要忘记适当地设置 STATICFILES_DIRS 设置,让 django.contrib.staticfiles 知道除了应用程序目录中的文件之外,还可以在哪里查找文件。'

    值得一提的是,这绝对不适合部署,但会很好地用于开发。

    【讨论】:

    • +1 获取文档链接。效果很好。当我拔头发的时候,我不知道那个链接在哪里。
    【解决方案2】:

    问题是您不应该在STATIC_ROOT 中手动输入任何内容。它只是生产中collectstatic 管理命令的垃圾场,应该由您的网络服务器提供服务。

    在开发过程中,Django自动为您应用程序的“静态”目录和STATICFILES_DIR 中的任何文件夹中的任何内容提供服务。如果您有项目范围的静态资源,则需要创建一个完全独立的文件夹,与STATIC_ROOTMEDIA_ROOT 不同,并将其添加到STATICFILES_DIRS。我通常称它为“资产”,但它的名字并不重要。

    【讨论】:

    • @jvc26 的回答完成了工作。 +1 for “这只是生产中 collectstatic 管理命令的垃圾场”
    【解决方案3】:
    1. 在settings.py中将mediastatic的完整路径添加到STATICFILES_DIRS
    2. 确保settings.py 中的TEMPLATE_CONTEXT_PROCESSORS 中有'django.core.context_processors.static',默认情况下它就在那里。
    3. 在您的模板中使用{{ STATIC_URL }}images/ball.png

    【讨论】:

    • 回答这个问题的原因是,在开发(运行服务器)中,静态文件是通过STATIC_URL自动提供的。
    • 不,不,不,不,还有……等等……不。不要不要STATIC_ROOTMEDIA_ROOT 添加到STATICFILES_DIRS。这里的问题是 Django 不服务 STATIC_ROOT,故意
    • 没有人在谈论STATIC_ROOT。问题只是“如何使用开发服务器从目录提供文件”。
    • 不是你是怎么做的。阅读文档。或者,我想,更合适的是,这不是您为mediastatic 中的项目提供服务的方式。这就是重点。
    • {{ STATIC_URL }} 呈现为空并且看不到任何错误。不过感谢您的关注。可能是我解释得不够好。
    猜你喜欢
    • 2012-06-04
    • 2014-03-13
    • 2012-01-26
    • 2013-12-22
    • 2015-08-06
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 2012-05-08
    相关资源
    最近更新 更多