【问题标题】:Correct media_root and I recived 404 in django app正确的 media_root,我在 django 应用程序中收到 404
【发布时间】:2016-11-14 11:04:04
【问题描述】:

我的 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

【问题讨论】:

  • 你确定 jquery 应该驻留在 MEDIA_ROOT 而不是 STATIC_ROOT 下吗? MEDIA 适用于用户上传的资源,而 STATIC 适用于 JS/CSS 等应用资源。
  • 是的,我确定因为“adminextra”文件夹是我在管理面板中使用的文件
  • jquery.js 在您的磁盘上的什么位置? settings.DEBUG 的值是多少?
  • 文件 jquery 位于:/files/dev/projects/mynewproject/project/concerthall/media/adminextra/js settings.DEBUG = True
  • 假设您的MEDIA_URL/media/,它会在用户端本地存储的根目录下创建一个media 文件夹,并在那里搜索文件。 STATIC_URL 也是如此。因此,将您的 MEDIA_URL 更改为 /files/dev/projects/mynewproject/media。甚至我也很难为同样的问题找到解决方案。另一个问题是。建议检查 DEBUG 日志返回的 MEDIA_ROOT 和 BASE_DIR 的路径。

标签: python django url media document-root


【解决方案1】:

如果

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'),
)

您的 Web 资源 (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",)

【讨论】:

    猜你喜欢
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2020-11-23
    • 2011-07-05
    相关资源
    最近更新 更多