代码之家  ›  专栏  ›  技术社区  ›  Ram Rachum

Django开发过程中的静态媒体服务:为什么媒体不扎根?

  •  20
  • Ram Rachum  · 技术社区  · 14 年前

    我读 this guide 关于在开发过程中为Django提供静态媒体服务。

    我注意到了 MEDIA_URL MEDIA_ROOT 没有用在这个里面。为什么?有什么区别?

    我试着用它 媒体网址 中间根 结果很奇怪。

    3 回复  |  直到 8 年前
        1
  •  27
  •   Frozenskys    14 年前

    在生产环境中,您希望从前端Web服务器(Apache、nginx或类似服务器)提供媒体,以避免在django/python进程上额外加载。媒体URL和媒体根通常用于此。

    运行内置的开发服务器,您需要在url.py文件中设置正确的url-我通常使用如下方法:

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

    它从设置文件中获取媒体根目录,这意味着它可以用于开发和直播。

        2
  •  21
  •   jathanism    14 年前

    直接从settings.py中的注释开始…

    中间根

    这个 MEDIA_ROOT 是存放媒体的目录的绝对路径,如 /home/media/media.lawrence.com/ .

    媒体网址

    这个 MEDIA_URL 处理媒体的URL 中间根 . 如果有路径组件,请确保使用尾随斜杠(在其他情况下是可选的)。例子: http://media.lawrence.com “,” http://example.com/media/ “。

    所以,要改写这些…这个 中间根 文件在系统中的物理位置,以及 媒体网址 是这些文件映射到的位置。在开发中,这可能并不总是可以访问的,而且在大多数情况下,您的开发环境和生产环境是不同的,这是您必须返回并更改的。另一件事是,当Django被设计为不为您提供静态内容时,这不是一个好的实践。

    如果您要在开发中使用这个,我建议您使用 limiting it to DEBUG=True . 告诉Django在开发时从临时位置提供静态内容 DEBUG 设置为 True 是一种更好更安全的做法。你不会把你的网站投入生产 调试 对吧?好吧,至少你不应该。

    以下是我如何实现它的方法:

    设置:

    STATIC_DOC_ROOT = os.path.join(os.getcwd(), 'site_media')
    

    ULLS.PY:

    from django.conf import settings
    ## debug stuff to serve static media
    if settings.DEBUG:
        urlpatterns += patterns('',
            (r'^site_media/(?P<path>.*)$', 'django.views.static.serve', 
                {'document_root': settings.STATIC_DOC_ROOT}),
       )
    

    这样一来,我正在做的任何项目都有一个 site_media 其中包含所有必要媒体的目录。在dev中,它是独立的,除了 调试 我无论如何都会这么做。

        3
  •  9
  •   rjmoggach    8 年前

    Django文档推荐了我为我的用例修改的以下方法:

    urlpatterns = [
        # url patterns
    ]
    
    from django.conf import settings
    
    if settings.DEBUG:
        from django.conf.urls.static import static
        urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    

    注: 上面假设您已经设置了 MEDIA_URL MEDIA_ROOT 正确地

    …这里是 djangodocs linkslap .

    推荐文章