Tud*_*scu 6 python media django
我在从Django应用程序提供用户上传文件时遇到一些问题:
来自models.py:
class Picture (models.Model):
title = models.CharField(max_length=48)
date_added = models.DateTimeField(auto_now=True)
content = models.ImageField(upload_to='pictures')
Run Code Online (Sandbox Code Playgroud)
从Django管理员,文件上传到user_res/pictures /文件夹.
从项目的settings.py:
MEDIA_ROOT = 'user_res'
MEDIA_URL = '/user_res/'
STATIC_ROOT = ''
STATIC_URL = '/static/'
Run Code Online (Sandbox Code Playgroud)
每次我尝试引用静态资源(即css或js文件)时,一切都可以正常使用诸如
http://localhost:8000/static/<subfolder>/main.css.
Run Code Online (Sandbox Code Playgroud)
但是,我无法访问用户上传的文件(由user_res/pictures文件夹中的管理界面创建的文件与相对URL,如
user_res/pictures/test.jpg
Run Code Online (Sandbox Code Playgroud)
使用来自Django Picture模型可调用的此代码行动态创建URL:
return '<img src="{}"/>'.format(self.content.url)
Run Code Online (Sandbox Code Playgroud)
我没有url.py文件中的静态或媒体文件的专用url-s.
有没有人知道如何让Django提供媒体文件?我知道对于实时环境,我需要配置一个http服务器来服务该特定目录,但是现在我想维护一个轻量级的开发套件.
谢谢.
编辑urls.py文件,如下所示.
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = patterns('',
# ... the rest of your URLconf goes here ...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Run Code Online (Sandbox Code Playgroud)
编辑您的项目settings.py看起来像:
#Rest of the settings
MEDIA_URL = '/media/'
MEDIA_ROOT = 'media'
STATIC_ROOT = ''
STATIC_URL = '/static/'
Run Code Online (Sandbox Code Playgroud)
请仔细阅读有关提供用户上传文件的官方Django文档.链接到文档:https://docs.djangoproject.com/en/1.5/howto/static-files/#serving-files-uploaded-by-a-user
我认为 url 属性返回一个相对 URL(Django 的 FileField 文档),所以你应该有:
return '<img src="{}"/>'.format(MEDIA_URL + self.content.url)
Run Code Online (Sandbox Code Playgroud)
相对 URL 不起作用,因为访问“http://localhost/books/”的用户将请求“http://localhost/books/user_res/pictures/test.jpg”。