"加载来自静态文件的静态"和" django.core.context_processors.static"在Django

时间:2014-05-04 16:01:50

标签: django django-staticfiles static-files

当我了解Django如何处理静态文件时,我已经看到了两种不同的方式来提供静态文件,同时仍然允许移植性。

  • 一种方法是在模板中执行以下操作:

    {% load static from staticfiles %}
    <img src="{% static "images/hi.jpg" %}" alt="Hi!" />
    

    关于Django文档的文档here

  • 我看到的另一种方法是为静态文件加载上下文处理器,然后使用

    <img src="{{ STATIC_URL }}images/hi.jpg" alt="Hi!" />
    

    如Django文档中所述here。使用此方法时,我会根据

    更改STATIC_URL
    if DEBUG:
         STATIC_URL = 'localhost'
    else:
         STATIC_URL = 'some_static_server_url'
    

哪种做法更好?有一种方式比另一种更好吗?例如,this SO问题有两种方法作为答案,this one有第二种方法。任何见解都会有所帮助。

1 个答案:

答案 0 :(得分:4)

使用Django的默认StaticFilesStorage时,两种方法基本相同。这两种方法都不知道任何实际文件。这两种方法只是将STATIC_URL设置和实际文件路径连接在一起。

使用自定义文件存储后端时可能会有所不同。如果您需要灵活性,例如如果某些文件存储有不同的静态URL,则可以覆盖后端的url方法,以根据文件的实际位置返回URL。使用STATIC_URL设置无法实现这一点。但是,这种情况非常罕见:大多数服务器将其静态文件存储在同一服务器或第三方服务的单个位置。

当您定义STATIC_URL设置且静态文件与网站位于同一域时,最好将其定义为根相对网址,例如'/static/'。这增加了可移植性并且不太可能导致错误。如果已涵盖可以部署代码的所有系统,您将不再需要担心。