Django 静态文件开发
Posted
技术标签:
【中文标题】Django 静态文件开发【英文标题】:Django Static Files Development 【发布时间】:2012-02-29 03:55:48 【问题描述】:从关于该主题的类似标题的数量来看,这似乎是一个混乱的根源,但是尝试使用 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 名称)。
【问题讨论】:
致歉我没有写完不小心提交了!马上更新 @user1178602:希望你能在关闭前更新(只剩一票)。 @user1178602:不,你没有成功。 完成此操作后,您应该标记并要求重新打开它。 您的模板中似乎无权访问STATIC_URL
。 'django.core.context_processors.static'
加到TEMPLATE_CONTEXT_PROCESSORS
了吗?
【参考方案1】:
根据您迄今为止发布的内容,您似乎正在关注django.contrib.staticfiles
的文档。我同意the docs 可能很难理解,尤其是对于 django 新手。
我认为混淆源于django.contrib.staticfiles
有两种操作模式:
-
在使用development server 的开发阶段,它会动态搜索预定义目录中的静态文件并使其在
STATIC_URL
上可用
对于部署,它有助于将静态文件整理到单个目录(使用STATIC_ROOT
定义),以便可以使用适合静态文件的网络服务器托管静态文件。此整理是使用 python ./manage.py collectstatic
完成的。
这里简要介绍了如何启动和运行。我没有机会尝试,所以可能会有错误。希望这将帮助您入门,至少可以帮助您理解文档。如有疑问,请参阅文档。
在开发服务器上托管静态文件
确保'django.contrib.staticfiles'
中有INSTALLED_APPS
指定STATIC_URL
。这将是托管静态文件的路径。
STATIC_URL = '/static/'
确保您的文件位于正确的目录中。默认情况下,staticfiles
将在每个已安装应用程序的static/
目录以及STATICFILES_DIRS
中定义的目录中查找文件。 (此行为取决于STATICFILES_FINDERS
中列出的后端)。
在您的情况下,您可能希望在STATICFILES_DIRS
中指定您的目录:
STATICFILES_DIRS = (
'C:/Users/Dan/seminarWebsite/static/',
)
通过将以下内容添加到urls.py
的end 使视图可访问:
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()
确保您在 settings.py
中有 DEBUG = True
。
就是这样。
如果您运行您的开发服务器 (./manage.py runserver
),您应该能够通过 http://localhost:8000/static/images/vision.jpeg
(服务于 C:/Users/Dan/seminarWebsite/static/images/vision/jpeg
)访问您的文件。
链接到模板中的静态文件
有两种方法可以为您的静态文件获取正确链接 - 使用 staticfiles template tag,以及使您的模板可以访问 STATIC_URL
。既然你尝试了后者,我们会坚持下去。
确保您在 TEMPLATE_CONTEXT_PROCESSORS
中有 'django.core.context_processors.static'
。如果您还没有重新定义TEMPLATE_CONTEXT_PROCESSORS
,那么没有什么可做的,因为it should be there by default。
确保在渲染模板时使用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
设置为的任何目录),您就可以开始了。
如果您的文件分散在不同的目录和/或特定于应用的静态文件中,则需要整理它们。
将STATIC_ROOT
设置为您要存储整理文件的目录。
运行./manage.py collectstatic
进行排序。
将您的网络服务器配置为在/static/
(或您将STATIC_URL
设置为的任何目录)上托管该目录(STATIC_ROOT
)。
【讨论】:
我的模板上下文处理器中有这个,感谢您指出我忽略了 requestcontext。但是它仍然无法正常工作。如果图像正常工作,它的 URL 应该是什么?由于图像当前具有位置127.0.0.1:8000/homepage/images/vision.jpeg,这似乎是错误的?不是说我是专家,但这可能会对问题有所了解? 此外,我发现从新手的角度来看这些文档很难理解,因此我一直在搜索各种博客/论坛以寻求建议 你能看到http://127.0.0.1:8000/homepage/static/images/vision.jpeg
的图片吗?
重要提示:在完成“在开发服务器上托管静态文件”的所有步骤之后重新启动您的服务器!我知道这对你们中的一些人来说可能很明显,但我在我尝试重新启动服务器之前,我已经花了很多时间无望地将我的文件从一个地方移动到另一个地方。
另外,关于“在开发服务器上托管静态文件”的步骤,请确保您的应用列在 settings.py 的“INSTALLED_APP”元组中!以上是关于Django 静态文件开发的主要内容,如果未能解决你的问题,请参考以下文章