正确的media_root,我在django应用程序中收到了404

时间:2016-11-14 11:04:04

标签: python django url media document-root

我的Django应用程序管理面板中的图标有问题。 我的根媒体文件夹中包含所有文件:

'/files/dev/projects/mynewproject/media'

但在控制台中我收到404错误。

我的urls.py

urlpatterns = static(settings.STATIC_URL, document_root=settings.STATIC_ROOT
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + patterns('',
    # ...
)

我的MEDIA_ROOT:

MEDIA_ROOT = '/files/dev/projects/mynewproject/media'

终端响应:

/media/adminextra/js/jquery.js HTTP/1.1" 404 1829

1 个答案:

答案 0 :(得分:0)

如果

MEDIA_ROOT = '/files/dev/projects/mynewproject/media'

,网址为

http://localhost:8000/media/adminextra/js/jquery.js

然后文件的本地路径必须是:

/files/dev/projects/mynewproject/media/adminextra/js/jquery.js

而您(在评论中)说您的文件位于:

/files/dev/projects/mynewproject/project/concerthall/media/a‌​dminextra/js

当然,没找到。

这对于STATIC路径和URL的工作方式不同,因为您之间有collectstatic和STATIC文件查找器机制。我建议将您的资源放入STATIC源,因为它们属于它们。 MEDIA不适用于此。

此外,最佳做法应避免在您的设置中使用硬编码的绝对文件路径。这在共享项目中不起作用。

<git_root>/mynewproject/settings/base.py中的示例设置:

BASE_APP_DIR = os.path.dirname(os.path.realpath(project_module.__file__))
PROJECT_DIR = os.path.dirname(BASE_APP_DIR)

# Static files (CSS, JavaScript, Images)

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(PROJECT_DIR, 'static_collected')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media')

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    'compressor.finders.CompressorFinder',
)
STATICFILES_DIRS = (
    os.path.join(BASE_APP_DIR, 'static'),
)

将您的网络资源(JS / CSS / img)驻留在<git_root>/mynewproject/static及更低的应用目录下,并由collectstatic输出到<git_root>/static_collected。在制作时,您可以让NGINX或Apache在后一个目录中提供文件。

将文件放入:

mynewproject/project/concerthall/static/a‌​dminextra/js/jquery.js

(我认为,concerthall是一个带有models.py文件的应用。)

在使用它的管理员类中:

class Media:
    js = ("a‌​dminextra/js/jquery.js",)