刚刚升级到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',
)
我在url confs中添加了:
# 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 /
下退出 超级,超级迷茫。现在这一切看起来都非常复杂,而我之前从未遇到过任何问题。答案 0 :(得分:2)
我是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}),
)
答案 1 :(得分:0)
我打算先写评论但不知何故add comment
按钮不起作用。
您是否检查过媒体目录的权限?
由于它成为了答案,我将抛弃一个完美运行的Django 1.4站点配置。
结构:
-myproject
-- media
-- static
-- templates
-- myproject
--- settings.py
--- urls.py
settings.py:
PROJECT_ROOT = os.path.dirname(os.path.dirname(__file__)) # Not the best way but works
MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media/')
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static/')
STATIC_URL = '/static/'
urls.py:
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns = patterns('',
...
(r'^media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.MEDIA_ROOT}),
)
urlpatterns += staticfiles_urlpatterns()
答案 2 :(得分:0)
如果您使用的是Django 1.4文件夹结构,则已将settings.py
移至新的website
应用文件夹,这意味着您的MEDIA_ROOT现在不正确。不确定相对位置是否适用于这种情况,但它应该是这样的
MEDIA_ROOT = os.path.join(DIRNAME, '../media/')
使用绝对路径可能更简单。