Django静态文件开发

时间:2012-02-07 17:39:14

标签: django static-files

这似乎是一个混乱的来源,从这个主题的类似标题的数量判断,然而尝试我在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()

TEMPLATE:

"{{ STATIC_URL }}images/vision.jpeg"

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

2 个答案:

答案 0 :(得分:63)

根据您目前发布的内容,您似乎正在关注django.contrib.staticfiles的文档。我同意the docs可能很难遵循,特别是如果一个人对django不熟悉的话。

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

  1. 在使用development server的开发阶段,它会动态搜索预定义目录中的静态文件,并在STATIC_URL上提供
  2. 对于部署,它有助于将静态文件整理到单个目录(使用STATIC_ROOT定义),以便可以使用适合静态文件的Web服务器托管静态文件。此归类是使用python ./manage.py collectstatic完成的。
  3. 以下是如何启动和运行的快速摘要。我没有机会试一试,所以可能会有错误。希望这将有助于您入门,至少可以帮助您理解文档。如有疑问,请参阅文档。

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

    1. 确保'django.contrib.staticfiles'

    2. 中有INSTALLED_APPS
    3. 指定STATIC_URL。这将是托管静态文件的路径。

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

      STATICFILES_DIRS = ( 
            'C:/Users/Dan/seminarWebsite/static/',  
      )
      
    5. 通过将以下内容添加到urls.py结束来使视图可访问:

      from django.contrib.staticfiles.urls import staticfiles_urlpatterns
      urlpatterns += staticfiles_urlpatterns()
      
    6. 确保DEBUG = True中有settings.py

    7. 就是这样。

      如果您运行开发服务器(./manage.py runserver),则应该可以通过http://localhost:8000/static/images/vision.jpeg(提供C:/Users/Dan/seminarWebsite/static/images/vision/jpeg)来访问您的文件。

      链接到模板中的静态文件

      有两种方法可以为您的静态文件获取正确的链接 - 使用staticfiles template tag,并使STATIC_URL可以访问您的模板。既然你已尝试过后者,我们会坚持下去。

      1. 确保'django.core.context_processors.static'中有TEMPLATE_CONTEXT_PROCESSORS。如果您尚未重新定义TEMPLATE_CONTEXT_PROCESSORS,那么就无需做任何事情,因为it should be there by default

      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))
        
      3. 您现在应该可以在my_template.html中使用以下内容:

        <a href="{{ STATIC_URL }}images/vision.jpeg" />
        

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

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

        如果您的文件分散在不同的目录和/或应用程序特定的静态文件中,那么您需要整理它们。

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

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

        3. 将您的网络服务器配置为托管STATIC_ROOT上的该目录(/static/)(或您设置STATIC_URL的任何内容)。

答案 1 :(得分:-1)

确保在加载静态文件时,已在settings.py中输入正确的url和路径 并且当您呈现html页面时,请确保其在正确的树形结构下