Django静态文件开发

dan*_*som 22 django static-files

从这个主题的类似标题的数量判断,这似乎是一个混乱的来源,但是尝试用django开发服务器在静态文件上找到的所有内容我几乎放弃了希望!

所以我的静态文件来自C:/ Users/Dan/seminarWebsite/static /,其中我有图像的子文件夹,css等.

设置:

STATIC_ROOT = 'C:/Users/Dan/seminarWebsite/static/'  
STATIC_URL = '/static/'  
Run Code Online (Sandbox Code Playgroud)

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

URLS:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns  
urlpatterns += staticfiles_urlpatterns()
Run Code Online (Sandbox Code Playgroud)

模板:

"{{ STATIC_URL }}images/vision.jpeg"
Run Code Online (Sandbox Code Playgroud)

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

Sha*_*hin 71

根据您到目前为止发布的内容,看起来您正在关注文档django.contrib.staticfiles.我同意这些文档很难遵循,特别是如果一个人对django不熟悉的话.

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

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

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

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

  1. 请确保您有'django.contrib.staticfiles'INSTALLED_APPS

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

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

    STATICFILES_DIRS = ( 
          'C:/Users/Dan/seminarWebsite/static/',  
    )
    
    Run Code Online (Sandbox Code Playgroud)
  4. 请通过添加下面的访问视图结束urls.py:

    from django.contrib.staticfiles.urls import staticfiles_urlpatterns
    urlpatterns += staticfiles_urlpatterns()
    
    Run Code Online (Sandbox Code Playgroud)
  5. 请确保您有DEBUG = Truesettings.py.

而已.

如果您运行dev服务器(./manage.py runserver),您应该能够通过http://localhost:8000/static/images/vision.jpeg(服务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))
    
    Run Code Online (Sandbox Code Playgroud)

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

<a href="{{ STATIC_URL }}images/vision.jpeg" />
Run Code Online (Sandbox Code Playgroud)

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

如果您需要提供的所有静态文件都存储在那个目录(C:/Users/Dan/seminarWebsite/static)中,那么您几乎就在那里.简单地配置您的网络服务器以托管该目录/static/(或您设置的任何目录STATIC_URL)并且您很高兴.

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

  1. 设置STATIC_ROOT为要存储整理文件的目录.

  2. 运行./manage.py collectstatic以进行整理.

  3. 配置您的Web服务器以托管该目录(STATIC_ROOT)/static/(或您设置的任何内容STATIC_URL).

  • 重要的一步:完成"在开发服务器上托管静态文件"的所有步骤后*重新启动服务器!*我知道对你们这些人来说可能很明显,但是我花了很多时间无可救药地从一个地方移动我的文件放置,直到我尝试重新启动服务器. (2认同)