在 Django 中访问“媒体”文件

2024-04-28

我很喜欢 Django,但是开发环境中的静态和媒体文件业务让我抓狂。请把我从愚蠢中拯救出来。

我在我的开发机器上。我有文件夹media在我的项目目录的根目录中。

In settings.py我有:MEDIA_ROOT = '' and MEDIA_URL = '/media/'.

In urls.py I have:

if settings.DEBUG:
    urlpatterns += patterns('',
        url(r'^media/(?P<path>.*)$',
            'django.views.static.serve',
            {'document_root': settings.MEDIA_ROOT, }),
    )

但我获取媒体文件的唯一方法是引用/media/media/ e.g. <img src="/media/media/image.png" />.

我期望(并且想要)
<img src="/media/image.png" />

谁能告诉我这里发生了什么,并给我一个设置媒体文件处理的简单方法?

非常感谢。


@Timmy O'Mahony - 谢谢!史诗般的帖子,非常清楚。但它留下了几个问题:

(1)我必须使用/media/ and /static/, not media/ and static/ as MEDIA_URL和和STATIC_URL- 我错过了什么吗?

(2) If collectstatic hoses /static/,您将站点级 CSS 放在哪里,例如网站的 CSS 文件?不在/static/,显然。

(3) 我将它们放在项目根目录下的目录“_”中并设置STATICFILES_DIRS指向它 - 这似乎是开发服务器获取静态文件的地方,尽管urlpatterns指示。如果这是错误的,那么您在开发过程中将站点级 CSS 放在哪里,以及工作流程是什么collectstatic当您修改它们时 - 是否必须在一个地方编辑它们,并在每次编辑后将它们收集到其他地方?


文件夹设置:

你的项目根目录应该是这样的:

/app1
/app2
/media
/static
/templates
urls.py
settings.py
manage.py

The media文件夹应该保存图像、下载内容和其他在网站正常使用期间(即开发完成后)可能上传的材料

The static文件夹应该包含网站开发的所有 CSS/JS 和其他材料


设置.py:

媒体根目录是上面提到的静态文件夹的绝对服务器路径。这意味着它应该是这样的:

MEDIA_ROOT = "/User/Bob/Sites/MySite/Project_root/media/"

MEDIA_URL是您在查看网站时应该访问媒体文件的相对浏览器 URL。应该是(通常)

MEDIA_URL = "media/"

这意味着所有材料都可以在以下位置查看http://example.com/media/ http://example.com/media/

相似地,静态根应该是这样的

STATIC_ROOT = "/User/Bob/Sites/MySite/Project_root/static/"

and STATIC_URL be

STATIC_URL = "static/" 

提供文件:

现在您已经告诉 django 这些文件夹应该在哪里,以及访问它们的正确 URL,您需要正确处理对文件夹的所有请求。

通常,当您在生产中时,您希望网络服务器负责提供静态文件和媒体文件。

如果你正在开发,你可以让 django 开发服务器为你提供服务。

为此,您告诉它将所有传入的请求路由到http://example.com/media http://example.com/media到您的 MEDIA_ROOT 以及传入的所有请求http://example.com/static http://example.com/static到您的 STATIC_ROOT。

为此,您需要向 URLS.py 添加一些 URL,如下所示:

from django.conf import settings
if settings.DEBUG:
    urlpatterns += patterns('',
        url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
            'document_root': settings.MEDIA_ROOT,
        }),
        url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {
            'document_root': settings.STATIC_ROOT,
        }),
)

Extra:

如果您有多个应用程序,每个应用程序都有自己的 CSS 和 JS 文件,您可能不想将它们放入一个 /static/ 文件夹中。将它们放在它们所属应用程序的子文件夹中可能会很有用:

/app1/static/ # Specific static folder
/app2/static/
/media/
/static/ # Root static folder

现在,您的网络服务器/开发服务器仅在您指定的位置查找静态文件(即根静态文件夹),因此您需要收集子文件夹中的所有文件并将它们复制到根静态文件夹。您可以手动执行此操作,但 django 提供了一个命令来为您执行此操作(这是静态应用程序的全部要点)

./manage collectstatic
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Django 中访问“媒体”文件 的相关文章

  • 有皮茨时区列表吗?

    我想知道 Python 库 pytz 中时区参数的所有可能值是什么 怎么做 您可以列出所有可用的时区pytz all timezones In 40 import pytz In 41 pytz all timezones Out 42 A
  • 如何将自定义迁移添加到外部 Django 应用程序

    我已经在我的自定义 Django 1 10 应用程序中对一些第三方应用程序进行了一些猴子修补 现在 当我尝试创建初始迁移时 它还会为这些外部应用程序生成迁移 但它将这些迁移放在我的 virtualenv 的站点中 packages 目录 无
  • 如何引用 models.py 之外的信号

    在文档中Django 它指定models py是定位信号回调函数的好地方 post save pre save etc 这段代码应该放在哪里 您可以将信号处理和注册代码放在您喜欢的任何地方 但是 您需要确保它所在的模块获取 尽早导入 以便信
  • Django 表单验证消息未显示

    我试图限制可以以表单上传的文件类型 大小和扩展名 该功能似乎有效 但未显示验证错误消息 我意识到if file size gt 4 1024 1024可能不是最好的方法 但我稍后会处理这个问题 这是 forms py class Produ
  • Django ModelForm 验证失败,没有错误

    好吧 我已经盯着这几个小时试图弄清楚发生了什么 但无济于事 我正在尝试使用 instance 关键字创建一个 ModelForm 将其传递给一个现有的模型实例 然后保存它 这是 ModelForm 在我试图找出此问题的原因时 从原始版本中删
  • python 2.7+ 中的组引用无效

    我正在尝试将我的网页 在 django 中创建 中的所有 WikiLink 类型的字符串转换为 html 链接 我正在使用以下表达式 import re expr r s A Z a z A Z a z s repl r a href 1
  • django管理员登录后重定向到另一个页面

    我正在 Django 中制作一个自定义管理页面 我不想重新发明轮子 因此想使用 Django 管理登录表单让员工登录并随后将他们重定向到 my url 但是 我无法找到在 admin 成功登录后将用户重定向到自定义网址的方法 因为我偶然发现
  • 测试中的模型 - Django 1.7 问题

    我正在尝试将我的项目移植为使用 Django 1 7 除了一件事之外 一切都很好 测试文件夹内的模型 Django 1 7 新迁移在内部运行 migrate 命令 在运行syncdb之前 这意味着如果模型未包含在迁移中 它将不会填充到数据库
  • 无限递归,同时扩展管理员的应用程序change_form模板

    我有以下模板template admin change form html extends admin change form html block extrahead include dojango base html block doj
  • 如何使用注释和聚合在 Django 的 ORM 中执行此 GROUP BY 查询

    我真的不知道如何翻译GROUP BY and HAVING到姜戈的QuerySet annotate and QuerySet aggregate 我正在尝试将这个 SQL 查询转换为 ORM 语言 SELECT EXTRACT year
  • django如何将字符串转换为模块?

    我试图了解 django 的另一个神奇之处 它可以将字符串转换为模块 In settings py INSTALLED APPS声明如下 INSTALLED APPS django contrib auth django contrib c
  • DRF:以编程方式从 TextChoices 字段获取默认选择

    我们的网站是 Vue 前端 DRF 后端 在一个serializer validate 方法 我需要以编程方式确定哪个选项TextChoices类已被指定为模型字段的默认值 TextChoices 类 缩写示例 class PaymentM
  • 在子管理中显示父字段(list_display)

    这是 models py 的片段 class Applicant models Model name models CharField email models CharField class Application models Mode
  • 在 modelformset 工厂中使用自定义表单?

    我希望能够在 modelformset factory 中使用自定义表单 例如 模型 py class Author models Model name models CharField address models CharField c
  • django:django.utils.function.SimpleLazyObject 的目的?

    我遇到了分配的问题request user到一个名为prior user 然后基本上对用户进行了身份验证 然后检查是否request user prior user 我预计它们不会相同prior user应包含 AnonymousUser
  • redis - 使用哈希

    我正在使用 redis 为我的 Web 应用程序实现社交流和通知系统 我是 redis 的新手 我对哈希值及其效率有一些疑问 我读过这篇很棒的文章Instagram 帖子 http instagram engineering tumblr
  • 在身份验证上运行 Django 测试时出现“重复键值”错误

    我有一个运行良好的 Django 网站 它的数据库中有少量数据 我想用它来进行测试 我已经完成了 dumpdata 来生成一些 json 固定装置 但是 当我尝试在我的应用程序 tagger 上运行测试时 我收到 Postgresql 错误
  • Django - 该进程无法访问该文件,因为该文件正在被另一个进程使用

    我正在尝试在 Windows 10 上运行 Django 我是 Django 的新手 我正在使用 Compressor Toolkit 我的问题是 我可以运行 manage py 但本地主机说 base html 第 9 行出错该进程无法访
  • 运行 Django 测试时如何将 DEBUG 设置为 True?

    我目前正在运行一些 Django 测试 看起来DEBUG False默认情况下 有没有办法运行我可以设置的特定测试DEBUG True在命令行还是在代码中 对于测试用例内的特定测试 您可以使用 override settings 装饰器 f
  • 访问 Scrapy 内的 django 模型

    是否可以在 Scrapy 管道内访问我的 django 模型 以便我可以将抓取的数据直接保存到我的模型中 我见过this https scrapy readthedocs org en latest topics djangoitem ht

随机推荐