28

从关于该主题的类似标题的数量来看,这似乎是造成很多混乱的根源,但是尝试使用 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 名称)。

4

1 回答 1

97

根据您迄今为止发布的内容,您似乎正在关注django.contrib.staticfiles. 我同意这些文档可能很难理解,特别是如果一个 django 新手。

我认为混淆源于django.contrib.staticfiles具有两种操作模式的事实:

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

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

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

  1. 确保你'django.contrib.staticfiles'INSTALLED_APPS

  2. 指定STATIC_URL。这将是托管静态文件的路径。

    STATIC_URL = '/static/'
    
  3. 确保您的文件位于正确的目录中。默认情况下,staticfiles将在static/每个已安装应用程序的目录以及STATICFILES_DIRS. (此行为取决于 中列出的后端STATICFILES_FINDERS)。在您的情况下,您可能希望在以下位置指定您的目录STATICFILES_DIRS

    STATICFILES_DIRS = ( 
          'C:/Users/Dan/seminarWebsite/static/',  
    )
    
  4. 通过将以下内容添加到末尾来使视图可访问urls.py

    from django.contrib.staticfiles.urls import staticfiles_urlpatterns
    urlpatterns += staticfiles_urlpatterns()
    
  5. 确保您DEBUG = Truesettings.py.

而已。

如果您运行您的开发服务器 ( ./manage.py runserver),您应该能够通过http://localhost:8000/static/images/vision.jpeg(which serving 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 。例子:

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

您现在应该可以在您的 中使用以下内容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配置您的网络服务器以在/static/(或您设置的任何内容)上托管该目录(STATIC_URL)。

于 2012-02-07T18:26:49.673 回答