【问题标题】:Serving static media directly from heroku with Django使用 Django 直接从 heroku 提供静态媒体
【发布时间】:2013-10-15 12:29:39
【问题描述】:

由于源问题无法在我的 S3 存储桶上存储 TinyMCE js 文件,我正试图让 Heroku 为它们提供服务。

这是我迄今为止尝试过的,但没有运气。浏览器 url 看起来不错 (http://www.mysite.com/media/js/tiny_mce/tiny_mce.js),但 heroku 没有提供它们并返回 404。

这是我的代码:

Settings.py

MEDIA_ROOT = os.path.join(PROJECT_PATH, 'media')
MEDIA_URL = '/media/'
TINYMCE_JS_URL = MEDIA_URL + 'js/tiny_mce/tiny_mce.js'
TINYMCE_JS_ROOT = MEDIA_ROOT + 'js/tiny_mce'

urls.py

 urlpatterns += patterns('',
       (r'^static/(?P<path>.*)$', 'django.views.static.serve', {
        'document_root': settings.STATIC_URL}))
    urlpatterns += patterns('',
       (r'^media/(?P<path>.*)$', 'django.views.static.serve', {
        'document_root': settings.MEDIA_ROOT}))

【问题讨论】:

    标签: django heroku django-tinymce


    【解决方案1】:

    我可以使用以下代码直接从 heroku 提供静态资产:

    settings.py:

    MEDIA_ROOT = os.path.join(PROJECT_PATH, 'media')
    MEDIA_URL = '/media/'
    TINYMCE_JS_URL = MEDIA_URL + 'js/tiny_mce/tiny_mce.js'
    TINYMCE_JS_ROOT = MEDIA_ROOT + 'js/tiny_mce'
    

    urls.py:

    urlpatterns = patterns('',
        ...
        (r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': True, }),
        (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT, 'show_indexes': True, }),
    )
    

    base.html:

    <script type="text/javascript" src="{{ MEDIA_URL }}js/tiny_mce/tiny_mce.js"></script>
    
    <script type="text/javascript">
        tinyMCE.init({
        mode: "textareas",
        theme: "advanced",
        forced_root_block: false,
        force_p_newlines : false,
        force_br_newlines : true,
    });
    </script>
    

    【讨论】:

      【解决方案2】:

      好的,在 github 讨论 https://github.com/aljosa/django-tinymce/pull/15987654321@ 中使用 cmets 来工作

      我主要更改了 urls.py:

       urlpatterns += patterns('',
             (r'^static/(?P<path>.*)$', 'django.views.static.serve', {
              'document_root': '/app/.heroku/python/lib/python2.7/site-packages/tinymce/static/'}))
      

      我觉得这可以更好地解决,但我没有想法,这很有效

      【讨论】:

        【解决方案3】:

        对于 Django >= 2.0.0,对于直接从 heroku 提供 MEDIA_URL,您可以使用

        from django.urls import include, path, re_path
        from django.views.static import serve
        
        
        urlpatterns = [
        ...
        re_path(r'^media/(?P<path>.*)$', serve,
                kwargs=dict(document_root=settings.MEDIA_ROOT)),
        ]
        

        请记住,heroku 会在每次部署时删除 MEDIA_ROOT 文件夹。

        更多信息 https://help.heroku.com/K1PPS2WM/why-are-my-file-uploads-missing-deleted

        【讨论】:

          猜你喜欢
          • 2012-07-07
          • 2023-03-25
          • 2020-05-23
          • 2012-10-29
          • 2016-07-19
          • 2011-06-02
          • 2019-03-09
          • 2018-07-20
          • 2013-09-04
          相关资源
          最近更新 更多