Django 1.4在开发服务器上提供MEDIA_URL和STATIC_URL文件

刚升级到Django 1.4,在开发服务器上新增“改进”的静态和媒体文件服务时遇到了严重问题.我喜欢Django,但是为什么他们在使用STATIC_URL,STATIC_ROOT,STATICFILES_DIR使这些文件变得更复杂,现在完全超出了我的范围.

我只是尝试在开发服务器上提供静态和上传的所有文件.经过大量实验后,我的STATIC_URL文件正常工作,但我根本无法获得MEDIA_URL文件.

设置:

DIRNAME = os.path.dirname(__file__)
MEDIA_ROOT = os.path.join(DIRNAME, 'media/')
MEDIA_URL = '/media/'
STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = ()

我添加了媒体和静态上下文处理器:

TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
'django.core.context_processors.media',
'django.core.context_processors.static',
"django.core.context_processors.request",
'satchmo_store.shop.context_processors.settings',
'django.contrib.messages.context_processors.messages',

)

我在网址中添加了:

# serve static and uploaded files in DEV
urlpatterns += staticfiles_urlpatterns()
urlpatterns + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

添加了两个conf设置,如文档中所示,第一个用于静态,第二个用于媒体.

我的结构,网站是一个应用程序和静态目录放在它内部按照djangoproject的指示:

<myproject>
  --media
  --settings
  --templates
  --website
      |->static

在模板中我可以提供静态内容没问题

{{STATIC_URL}}css/style.css

但任何上传的图片,这个使用photologue,都没有提供,但网址是正确的:

/media/photologue/photos/cache/spawning-2_admin_thumbnail.jpg

该目录结构确实在media /下退出

超级,超级迷茫.现在这一切似乎都非常复杂,而我之前从未遇到过任何问题.

最佳答案 我是Django的新手,我从来没有对静态内容有任何问题.

这是我的配置.我希望它可以提供帮助

我的文件夹结构

django-project
--mainapp
----settings.py
----wsgi.py
----[...]
--otherapp
--fixtures
--static
--templates
--manage.py
--requirements.txt

settings.py

import os, socket

DEBUG = True
TEMPLATE_DEBUG = DEBUG
MAIN_APP = os.path.abspath(os.path.dirname(__file__))
PROJECT_ROOT = os.path.abspath(os.path.join(MAIN_APP, ".."))
MY_LOCALHOST = "VirusVault.local" # this is the real name of my local machine :)

try: HOST_NAME = socket.gethostname()
except: HOST_NAME = "localhost"

[…]

if HOST_NAME == MY_LOCALHOST:
    STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static/')
    STATIC_URL = "/static/"
    MEDIA_ROOT = os.path.join(STATIC_ROOT, 'media/')
    MEDIA_URL = "/media/"
else:
    STATIC_ROOT = "/server/path/to/static/files"
    STATIC_URL = "http://server.com/static/"
    MEDIA_ROOT = "/server/path/to/static/files/media/"
    MEDIA_URL = 'http://server.com/static/media/'

您需要将’django.contrib.staticfiles’添加到INSTALLED_APPS

urls.py

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