这似乎是一个很大的混乱的来源,从这个主题的类似标题的数量来判断,但是尝试我能找到的所有静态文件与django开发服务器,我几乎放弃了希望!
因此,我的静态文件是从 C:/Users/Dan/Website/static/ 提供的,其中我有图像,css等的子文件夹。
- 设置:*
STATIC_ROOT = 'C:/Users/Dan/seminarWebsite/static/'
STATIC_URL = '/static/'
静态文件应用程序也处于活动状态。
- URL:*
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名称)。
2条答案
按热度按时间yiytaume1#
根据你到目前为止发布的内容,看起来你正在遵循
django.contrib.staticfiles
的文档。我同意文档可能很难理解,特别是如果你是Django的新手。我相信混淆源于
django.contrib.staticfiles
有两种操作模式:1.在使用开发服务器的开发阶段,它会在预定义的目录中动态搜索静态文件,并使其在
STATIC_URL
上可用1.对于部署,它帮助将静态文件整理到单个目录(使用
STATIC_ROOT
定义),以便可以使用适合静态文件的Web服务器托管静态文件。这个排序使用python ./manage.py collectstatic
完成。这里有一个关于如何启动和运行的快速摘要。我没有机会尝试,所以可能会有错误。希望这能帮助你开始,至少能帮助你理解文档。如有疑问,请参阅文档。
在开发服务器上托管静态文件
1.确保
INSTALLED_APPS
中有'django.contrib.staticfiles'
1.指定
STATIC_URL
。这将是您的静态文件将托管的路径。1.确保您的文件在正确的目录中。默认情况下,
staticfiles
将在每个已安装应用的static/
目录中以及STATICFILES_DIRS
中定义的目录中查找文件。(此行为取决于STATICFILES_FINDERS
中列出的后端)。在本例中,您可能希望在STATICFILES_DIRS
中指定目录:1.通过在
urls.py
的end添加以下内容,使视图可访问:1.确保您在
settings.py
中有DEBUG = True
。就这样
如果你运行你的开发服务器(
./manage.py runserver
),你应该能够通过http://localhost:8000/static/images/vision.jpeg
(服务于C:/Users/Dan/seminarWebsite/static/images/vision/jpeg
)访问你的文件。在模板中链接静态文件
有两种方法可以获得静态文件的正确链接-使用staticfiles模板标记,以及使模板可以访问
STATIC_URL
。既然你尝试过后者,我们就坚持这一点。1.确保
TEMPLATE_CONTEXT_PROCESSORS
中有'django.core.context_processors.static'
。如果你还没有重新定义TEMPLATE_CONTEXT_PROCESSORS
,那么没有什么可做的,因为它默认应该在那里。1.确保在呈现模板时使用RequestContext。范例:
您现在应该能够在
my_template.html
中使用以下内容:在生产服务器上托管静态文件。
如果您需要提供的所有静态文件都存储在这个目录(
C:/Users/Dan/seminarWebsite/static
)中,那么就差不多了。简单地配置你的web服务器在/static/
(或任何你设置的STATIC_URL
)上托管这个目录,你就可以开始了。如果你的文件分散在不同的目录和/或应用程序特定的静态文件,那么你需要整理它们。
1.将
STATIC_ROOT
设置为要存储整理文件的目录。1.运行
./manage.py collectstatic
进行排序。1.配置您的Web服务器,将该目录(
STATIC_ROOT
)托管在/static/
(或您将STATIC_URL
设置为的任何内容)上。8ehkhllq2#
我想分享我对当地发展的看法。它类似于Shawn Chin的答案,* 但不需要
DEBUG=True
和特殊的urlpatterns*,我认为它更通用和干净。第1、2、3点与答案相同,但以下内容不同:
1.在所有环境中以相同的方式提供URL: