Python Django使用媒体(上传文件并将其添加到模板)

Python Django使用媒体(上传文件并将其添加到模板),python,django,templates,upload,Python,Django,Templates,Upload,我试图学习如何在Django中上传文件并在模板中使用它们。 我的目标是用multiuplad字段创建post表单,但我从简单的事情开始。我试图上传单个文件,并在tempalate中添加指向这些文件的链接。这就是我迄今为止所做的: 型号: class Adds(models.Model): author = models.ForeignKey(User, verbose_name=u"Autor postu", blank=True, null=True) image = models.FileF

我试图学习如何在Django中上传文件并在模板中使用它们。 我的目标是用multiuplad字段创建post表单,但我从简单的事情开始。我试图上传单个文件,并在tempalate中添加指向这些文件的链接。这就是我迄今为止所做的:

型号:

class Adds(models.Model):
author = models.ForeignKey(User, verbose_name=u"Autor postu", blank=True, null=True)
image = models.FileField(upload_to='photos/')


def get_absolute_url(self):
    return settings.MEDIA_ROOT+"\%s" % self.image.name
我已经添加了函数get_absolute_url来获取添加了MEDIA_ROOT的url。它不起作用,因为媒体根路径部分用“\”分隔,而res用“/”分隔。这是如何使这个函数正常工作的第一个问题

我正在添加这样的链接
但我读到了关于url函数的内容,所以我尝试了类似这样的方法
,但它返回的url没有媒体根部分,所以只返回“upladed\u to\u name/file\u name”

我的媒体\u根目录设置:

MEDIA_ROOT= os.path.join(os.path.dirname(BASE_DIR), "static_env", "my_static", "media")
在shell中,我有如下内容:

In [1]: from voiceManaging.models import Pracownik

In [2]: i=Pracownik.objects.get(pk=1)

In [3]: i.zdjecie.url
Out[3]: 'photos/mama_0SADn31.jpg'

In [4]: i.zdjecie.path
Out[4]: u'E:\\Django\\Projects\\KCKAPP\\static_env\\media\\photos\\mama_0SADn31.
jpg'

因为您使用的是默认类,如果您在设置中定义了
MEDIA\u URL
,则存储类可以使用该设置为上载的文件生成URL&使用
.URL
属性生成相应的文件名

所以用你的例子

class Adds(models.Model):
    author = models.ForeignKey(User, blank=True, null=True)
    image = models.FileField(upload_to='photos')
为了说明属性&它们各自对字段做了什么,请看一下这一点

>>> add = Adds.objects.get(author="Mark")
>>> add.image
<FileField: mark.jpg>
>>> car.photo.name
'photos/mark.jpg'
>>> add.image.path
'/media/photos/mark.jpg'
>>> add.image.url
'http://media.example.com/photos/mark.jpg'
添加=添加.objects.get(author=“Mark”) >>>添加图像 >>>汽车、照片、名字 '照片/mark.jpg' >>>add.image.path “/media/photos/mark.jpg” >>>add.image.url 'http://media.example.com/photos/mark.jpg'
因此,
MEDIA\u URL
应该是一个URL,在该URL中,您的web服务器被配置为为为存储在
MEDIA\u ROOT
中的文件提供服务。好的,但是如何将这些“\”字符更改为“/”。文档声称ulr()应该返回带有媒体根的url。所以我认为应该有任何方法可以使用这个MEDIA\u ROOT。@Max我已经简化了默认文件系统存储类的答案,该类可以很好地与
MEDIA\u ROOT
MEDIA\u URL
配合使用,让您只需执行
add.image.URL
即可获得图像的完整URL。您可以添加
MEDIA\u ROOT
定义为?您使用的介质存储类别是什么?如果您不确定,则在您的设置中,它将是
默认文件存储
。我的设置中没有此静态设置。所以我的默认文件存储应该与媒体根相同?