Django 静态文件开发

问题描述 投票:0回答:2

从该主题上类似标题的数量来看,这似乎是一个令人困惑的来源,但是尝试了我在 django 开发服务器上在静态文件上能找到的所有内容,我几乎放弃了希望!

所以我的静态文件是从 C:/Users/Dan/seminarWebsite/static/ 提供的,其中我有图像、css 等的子文件夹。

设置:

STATIC_ROOT = 'C:/Users/Dan/seminarWebsite/static/'  
STATIC_URL = '/static/'  

静态文件应用程序也处于活动状态。

网址:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns  
urlpatterns += staticfiles_urlpatterns()

模板:

"{{ STATIC_URL }}images/vision.jpeg"

但是,仅出现一个损坏的链接,并且位于此地址:

http://127.0.0.1:8000/homepage/images/vision.jpeg
,我认为它不应该位于该地址(主页是调用静态图像文件的页面的 URL 名称)。

django static-files
2个回答
103
投票

根据您迄今为止发布的内容,您似乎正在遵循

django.contrib.staticfiles
的文档。我同意,文档可能很难理解,尤其是对于 django 新手来说。

我相信这种混乱源于以下事实:

django.contrib.staticfiles
两种操作模式:

  1. 在使用开发服务器的开发阶段,它会动态搜索预定义目录中的静态文件并使其在
    STATIC_URL
  2. 上可用
  3. 对于部署,它有助于将静态文件整理到单个目录(使用
    STATIC_ROOT
    定义),以便可以使用适合静态文件的网络服务器托管静态文件。此整理是使用
    python ./manage.py collectstatic
    完成的。

以下是如何启动和运行的快速摘要。我还没有机会尝试,所以可能会有错误。希望这将帮助您入门,并至少帮助您理解文档。如有疑问,请参阅文档。

在开发服务器上托管静态文件

  1. 确保

    'django.contrib.staticfiles'
    中有
    INSTALLED_APPS

  2. 指定
  3. STATIC_URL

    。这将是托管静态文件的路径。
    STATIC_URL = '/static/'

  4. 确保您的文件位于正确的目录中。默认情况下,
  5. staticfiles

    将在每个已安装应用程序的

    static/
    目录以及
    STATICFILES_DIRS
     中定义的目录中查找文件。 (此行为取决于 
    STATICFILES_FINDERS
     中列出的后端)。
    在您的情况下,您可能希望在 
    STATICFILES_DIRS
    :
     中指定您的目录
    
    
    STATICFILES_DIRS = ( 'C:/Users/Dan/seminarWebsite/static/', )

  6. 通过将以下内容添加到
  7. urls.py

    end 使视图可访问:

    
    
    from django.contrib.staticfiles.urls import staticfiles_urlpatterns urlpatterns += staticfiles_urlpatterns()

  8. 确保
  9. DEBUG = True

    中有

    settings.py
    
    

  10. 就是这样。

如果您运行开发服务器 (

./manage.py runserver

),您应该能够通过

http://localhost:8000/static/images/vision.jpeg
(服务于
C:/Users/Dan/seminarWebsite/static/images/vision/jpeg
)访问您的文件。

链接到模板中的静态文件

有两种方法可以获取静态文件的正确链接 - 使用

staticfiles 模板标签

,以及使 STATIC_URL 可访问您的模板。既然您已经尝试过后者,我们将坚持下去。


    确保
  1. 'django.core.context_processors.static'

    中有

    TEMPLATE_CONTEXT_PROCESSORS
    。如果您还没有重新定义
    TEMPLATE_CONTEXT_PROCESSORS
    ,则
    无需执行任何操作 
    ,因为 默认情况下它应该在那里。

    确保在渲染模板时使用
  2. RequestContext
  3. 。示例:

    from django.template import RequestContext # ... def some_view(request): # ... return render_to_response('my_template.html', { "foo" : "bar", # other context }, context_instance = RequestContext(request))

    
    
    您现在应该能够在您的
  4. my_template.html
中使用以下内容:

<a href="{{ STATIC_URL }}images/vision.jpeg" />

在生产服务器上托管静态文件。

如果您需要提供的所有静态文件都存储在该目录中 (

C:/Users/Dan/seminarWebsite/static

),那么您就差不多完成了。只需将您的网络服务器配置为在

/static/

(或您设置 
STATIC_URL
 的任何内容)上托管该目录,就可以开始了。
如果您的文件分散在不同的目录和/或应用程序特定的静态文件中,那么您需要整理它们。

  1. STATIC_ROOT

    设置为要存储整理文件的目录。

    
    

    运行
  2. ./manage.py collectstatic

    进行整理。

    
    

    配置您的网络服务器以在
  3. STATIC_ROOT
  4. (或您设置

    /static/

     的任何内容)上托管该目录 (
    STATIC_URL
    )。
    
        

我想分享我对当地开发的收据。这与 Shawn Chin 的答案类似,

0
投票
DEBUG=True

和特殊的 urlpatterns,我认为这更通用和干净。

第1、2、3点与答案中相同,但以下不同:

以相同的方式为所有环境提供 URL:

  1. # main urls.py urlpatterns = ( [ # URLs from apps are here ... ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) )
与 Django 4.2 相关

© www.soinside.com 2019 - 2024. All rights reserved.