【问题标题】:How to set STATIC_URL in Django settings.py for CDN如何在 Django settings.py 中为 CDN 设置 STATIC_URL
【发布时间】:2018-10-26 21:17:08
【问题描述】:

我想在我的 django 2.0.5 模板中使用静态文件,该模板位于:

https://my_cloud_front_adress.cloudfront.net/staticfiles/picture_small.jpg

在 Heroku 上我设置了变量:

STATIC_URL = https://my_cloud_front_adress.cloudfront.net/staticfiles/

templates/base.html

{% load static %}

{# this one is NOT working #}
<img src="{% static 'picture_small.jpg' %}" alt="my test image"/>

{# this one is working #}
<img src="https://my_cloud_front_adress.cloudfront.net/staticfiles/picture_small.jpg" alt="my test image"/>

我应该如何设置STATIC_URL 以使其在模板中工作:

<img src="{% static 'picture_small.jpg' %}" alt="my test image"/>

【问题讨论】:

  • 使用{% static ... %}时渲染的src值是多少?要检查这一点,右键单击图像 > 检查
  • 当我在 Heroku 上运行它时,我得到了错误 500。
  • 你可以转DEBUG=TRUE,这样你就可以真正看到错误了。或者,如果您为您的应用启用了错误日志记录,您可以发布错误日志吗?
  • Page not found (404) Request Method: GET Request URL: http://myexample.com/static/picture_small.jpg Using the URLconf defined in test7.urls, Django tried these URL patterns, in this order: admin/ The current path, static/picture_small.jpg, didn't match any of these.
  • 这不是 500 错误。据此,STATIC_URL 的值设置为'/static/'。在您的设置中将此值更改为您想要的值,一切都会正常工作。

标签: django


【解决方案1】:

user3170828 的答案是正确的,但要添加您可以尝试使用django-storages,它将负责将静态文件同步到 S3/Cloudfront 和 URL。

【讨论】:

    【解决方案2】:

    您提供的 STATIC_URL 值将与您的应用相关,因此在此处添加外部 url 没有意义。如果您希望文件在本地获取,您应该下载它们并将它们本地存储在您的应用程序中指定的 STATICFILES_DIRS 目录中,并按照Django docs 中的说明配置您的静态文件。

    否则,您可以直接通过 url 访问文件,而无需尝试将它们视为项目中的静态文件。

    【讨论】:

    • 添加外部 URL 确实有意义。 Django 只是使用STATIC_URL 为您的文件构建完整的 URL。无论 URL 是相对的还是绝对的,它都应该可以工作。其实docs中有一个绝对URL的例子。
    • 该示例未引用外部 URL。如果您在 STATIC_URL 中提供完整的 URL,您应该在那里提供所有静态文件。这在here 之前已经讨论过了。
    • "If you give a full URL in STATIC_URL you should serve all your static files there." 和您在评论中链接的帖子只是重申了我之前所说的 - 即您可以将 STATIC_URL 设置为外部网址。谢谢你同意我的看法。
    【解决方案3】:

    根据django documentation,您需要...,

    1. django.contrib.staticfiles 将此添加到 INSTALLED_APPS
    2. STATIC_URL = '/static/' 添加到您的 settings.py 中(我想您忘记添加了。
    3. 在模板顶部添加{% load static %}
    4. 然后使用&lt;img src="{% static "my_app/example.jpg" %}" alt="My image"/&gt;
    5. 另外还需要加STATICFILES_DIRS
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    STATIC_URL = '/static/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'static'),
    )
    

    【讨论】:

    • 1) django.contrib.staticfiles 默认添加 2) 我想使用 'my_cloud_front_adress.cloudfront.net/staticfiles' 而不是 'www.mywebsiteadress.com/static/example.jpg' 3) '{% load static % }' 一切就绪
    • 是的,我在 Heroku 变量 STATIC_URL = https://my_cloud_front_adress.cloudfront.net/staticfiles/987654331@ 上这样设置
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 2018-01-28
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    相关资源
    最近更新 更多