Django静态文件开发

1yjd4xko  于 2023-10-21  发布在  Go
关注(0)|答案(2)|浏览(102)

这似乎是一个很大的混乱的来源,从这个主题的类似标题的数量来判断,但是尝试我能找到的所有静态文件与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名称)。

yiytaume

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。这将是您的静态文件将托管的路径。

STATIC_URL = '/static/'

1.确保您的文件在正确的目录中。默认情况下,staticfiles将在每个已安装应用的static/目录中以及STATICFILES_DIRS中定义的目录中查找文件。(此行为取决于STATICFILES_FINDERS中列出的后端)。在本例中,您可能希望在STATICFILES_DIRS中指定目录:

STATICFILES_DIRS = ( 
      'C:/Users/Dan/seminarWebsite/static/',  
)

1.通过在urls.pyend添加以下内容,使视图可访问:

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

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。范例:

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)中,那么就差不多了。简单地配置你的web服务器在/static/(或任何你设置的STATIC_URL)上托管这个目录,你就可以开始了。
如果你的文件分散在不同的目录和/或应用程序特定的静态文件,那么你需要整理它们。
1.将STATIC_ROOT设置为要存储整理文件的目录。
1.运行./manage.py collectstatic进行排序。
1.配置您的Web服务器,将该目录(STATIC_ROOT)托管在/static/(或您将STATIC_URL设置为的任何内容)上。

8ehkhllq

8ehkhllq2#

我想分享我对当地发展的看法。它类似于Shawn Chin的答案,* 但不需要DEBUG=True和特殊的urlpatterns*,我认为它更通用和干净。
第1、2、3点与答案相同,但以下内容不同:
1.在所有环境中以相同的方式提供URL:

# 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相关 *

相关问题