Django静态文件开发

从关于这个主题的类似标题的数量来看,这似乎是一个混乱的来源,然而,我几乎放弃了希望,尝试在django开发服务器的静态文件上找到的一切

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

设置:

STATIC\u ROOT='C:/Users/Dan/seminarWebsite/STATIC/'
静态URL='/STATIC/'

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

url:

来自django.contrib.staticfiles.url的

导入静态文件\u urlpatterns
urlpatterns+=静态文件\u urlpatterns()

模板:

“{{STATIC_URL}}images/vision.jpeg”

但是,只有断开的链接出现在该地址:http://127.0.0.1:8000/homepage/images/vision.jpeg,我认为它不应该位于该地址(homepage是调用静态图像文件的页面的url名称)

根据您到目前为止发布的内容,您似乎正在关注django.contrib.staticfiles的文档。我同意这些文件可能很难遵循,特别是如果django是新手的话

我相信这种混淆源于这样一个事实,django.contrib.staticfiles有两种操作模式:

  1. 在使用开发服务器的开发阶段,它会在预定义的目录中动态搜索静态文件,并在static\u URL
  2. 对于部署,它帮助将静态文件整理到单个目录(使用static\u ROOT定义),以便可以使用适合静态文件的Web服务器托管静态文件。此排序是使用python./manage.py collectstatic完成的

这里有一个关于如何启动和运行的快速总结。我没有机会尝试,所以可能会有错误。希望这能帮助你开始,至少能帮助你理解文档。如有疑问,请参阅文件

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

  1. 确保在已安装的应用程序中有'django.contrib.staticfiles'

  2. 指定静态URL。这将是静态文件所在的路径

    STATIC\u URL='/STATIC/'
    
  3. 确保您的文件位于正确的目录中。默认情况下,staticfiles将查找每个已安装应用程序的static/目录中的文件,以及staticfiles\u DIRS中定义的目录中的文件。(此行为取决于STATICFILES\u FINDERS中列出的后端)。
    在您的情况下,您可能希望在STATICFILES\u DIRS中指定目录:

    静态文件\u DIRS=(
    “C:/Users/Dan/seminarWebsite/static/”,
    )
    
  4. 通过将以下内容添加到url.py的末尾,使视图可访问:

    来自django.contrib.staticfiles.url的

    导入静态文件\u urlpatterns
    urlpatterns+=静态文件\u urlpatterns()
    
  5. 确保在settings.py中有DEBUG=True

就这样

如果您运行dev服务器(/manage.py runserver),您应该能够通过http://localhost:8000/static/images/vision.jpeg(服务于C:/Users/Dan/seminarWebsite/static/images/vision/jpeg

链接到模板中的静态文件

有两种方法可以为静态文件获取正确的链接—使用staticfiles模板标记,以及使模板可以访问static\u URL。既然你尝试了后者,我们就坚持下去

  1. 确保您在TEMPLATE\u context\u processors中有'django.core.context\u processors.static'。如果您没有重新定义模板\u上下文\u处理器,那么没有什么可做的,因为默认情况下它应该在那里

  2. 确保在呈现模板时使用RequestContext。例如:

    django.template导入请求上下文中的

    
    # ...
    定义某些视图(请求):
    # ...
    返回render_to_response('my_template.html'{
    “foo”:“bar”,#其他上下文
    },context_instance=RequestContext(请求))
    

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

<a href=”https://stackoverflow.com/questions/9181047/{{STATIC_URL}}images/vision.jpeg/>

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

如果您需要提供的所有静态文件都存储在该目录中(C:/Users/Dan/seminarWebsite/static),那么您就快到了。只需简单地将您的Web服务器配置为在/static/上托管该目录(或设置static\u URL的任何内容),就可以了

如果文件分散在不同的目录和/或特定于应用程序的静态文件中,则需要对它们进行整理

  1. STATIC\u ROOT设置为要存储整理文件的目录

  2. 运行/manage.py collectstatic进行排序

  3. 将您的Web服务器配置为在/STATIC/上承载该目录(STATIC\u ROOT)(或设置为STATIC\u URL的任何内容)

发表评论