我很想喜欢Django,但是在开发环境中处理静态和媒体文件的问题让我感到非常困扰。请帮我解决这个问题。
我正在我的开发机器上工作。在我的项目目录根目录下有一个名为media
的文件夹。
在settings.py
文件中,我有:MEDIA_ROOT = ''
和 MEDIA_URL = '/media/'
。
在urls.py
文件中,我有:
if settings.DEBUG:
urlpatterns += patterns('',
url(r'^media/(?P<path>.*)$',
'django.views.static.serve',
{'document_root': settings.MEDIA_ROOT, }),
)
但是我唯一能获取媒体文件的方式是通过引用 /media/media/
,例如
<img src="/media/media/image.png" />
。
我期望(并希望)
<img src="/media/image.png" />
有人可以告诉我这里发生了什么,并为设置媒体文件处理提供一个简单的教程吗?
非常感谢。
@Timmy O'Mahony - 谢谢!非常棒的文章,讲得很清楚。但它还留下了几个问题:
(1) 我必须使用/media/
和/static/
,而不是media/
和static/
作为MEDIA_URL
和STATIC_URL
- 我错过了什么吗?
(2) 如果collectstatic
损坏了/static/
,那么您在哪里放置站点级别的CSS,例如站点的CSS文件?显然不能放在/static/
中。
(3) 我将它们放在项目根目录下的' _ '目录中,并将STATICFILES_DIRS
设置为指向它 - 尽管有urlpatterns
指令,似乎这就是开发服务器获取其静态文件的地方。如果那样是错误的,您应该在开发过程中将站点级别的CSS放在哪里,并且在修改它们时collectstatic
的工作流程是什么 - 每次编辑后都必须在一个地方进行编辑,然后在另一个地方收集它们吗?
<img src="{{ MEDIA_URL }}{{ evt_pic }}">
在模板中不会被定义。从1.8+开始,它没有被显式添加。 - John Cmedia context_processor
,我刚刚在阅读同样问题的其他答案时发现,有趣的是,ImageFields也提供了一个URL,因此实际上不需要context_processor和MEDIA_URL:src="{{artist.artist_image.url}}
。 - John C