gpt4 book ai didi

python - Django 找不到我的媒体文件(在开发服务器上)

转载 作者:太空狗 更新时间:2023-10-29 22:05:57 24 4
gpt4 key购买 nike

媒体目前在我的本地开发机器上。

我的 MEDIA_ROOT、MEDIA_URL、ADMIN_MEDIA_PREFIX 指定如下:

MEDIA_ROOT = os.path.join(os.path.dirname(__file__), "media")
MEDIA_URL = '/media/'
SITE_URL = 'http://localhost:80'
ADMIN_MEDIA_PREFIX = '/media/admin/'

没有“admin”文件夹,但我认为这不会有什么不同。在我的 urls.py 文件中:

(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),

我不知道应该怎么做才能让它正常工作。[我正在尝试学习 django 并且正在处理一个非常复杂的现有项目]

最佳答案

您正在混合和匹配 Django 1.3 之前和之后的静态文件处理。最初所有静态文件都是从 MEDIA_URL 提供的,但是 Django 1.3 引入了 staticfiles contrib 包和相关的 STATIC_ROOTSTATIC_URL 设置。 django.views.static.serve 使用新的 staticfiles 应用程序,您还没有设置它。

假设您正在运行 Django 1.3,首先,您需要将“staticfiles”添加到您的 INSTALLED_APPS。然后,您需要定义 STATIC_ROOTSTATIC_URL。标准位置是名为“static”的项目根目录。

您还需要添加静态文件模板上下文处理器:

TEMPLATE_CONTEXT_PROCESSORS = (
...
'django.core.context_processors.static',
)

这将使 STATIC_URL 变量在您的模板中可用,因此您可以使用类似 {{ STATIC_URL }}css/style.css 的内容来引用您的资源

>

您的所有静态资源还需要进入名为“static”的应用级目录。从不直接使用实际的项目根级“静态”目录。它只是 collectstatic 管理命令转储所有静态资源以用于生产的地方。

如果您想要项目范围内的静态资源(不绑定(bind)到任何一个特定的应用程序),您将需要一个完全独立的目录(即与MEDIA_ROOT STATIC_ROOT)。我倾向于使用一个名为“ Assets ”的名称。然后,您需要告诉 Django 在此处查找静态资源以及 STATICFILES_DIRS 设置:

STATICFILES_DIRS = (
os.path.join(os.path.dirname(__file__), 'assets'), # or whatever you named it
)

MEDIA_ROOT/MEDIA_URL 现在仅用于用户上传(例如,通过 FileFieldImageField 创建的任何文件) >s,所以你仍然需要它,但你永远不会在那里手动存储任何东西。

当您达到生产环境时,您的网络服务器将需要在 MEDIA_URLSTATIC_URL 处同时提供 MEDIA_ROOTSTATIC_ROOT , 分别。您还需要运行:

$ python manage.py collectstatic

让 Django 将所有静态文件编译到 STATIC_ROOT 指定的目录中。

关于python - Django 找不到我的媒体文件(在开发服务器上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9168187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com