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

时间:2015-12-15 23:22:37

标签: python django templates upload

我正在尝试学习如何在Django中上传文件并在模板中使用它们。 我的目标是创建具有multiuplad字段的帖子表单,但我从简单的事情开始。我试图uplad单个文件,并添加到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。它不起作用,因为MEDIA_ROOT路径部分带有“\”,res用“/”分隔。这是第一个问题,如何使这个功能正常工作。

我正在添加这样的链接<a href="{{plik.get_absolute_url}}">{{plik.get_absolute_url}}</a> 但是我读到了url函数,所以我尝试了类似于<a href="{{plik.image.url}}">{{plik.image.url}}</a>的东西,但它返回没有MEDIA_ROOT部分的url,因此只有“upladed_to_name / file_name”。

我的MEDIA_ROOT设置:

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'

1 个答案:

答案 0 :(得分:0)

由于您使用的是默认的FileSystemStorage课程,如果您在设置中定义了MEDIA_URL,则存储类可以使用该设置为您上传的文件构建一个网址。使用.url属性的相应文件名。

所以使用你的例子;

class Adds(models.Model):
    author = models.ForeignKey(User, blank=True, null=True)
    image = models.FileField(upload_to='photos')

说明属性&amp;他们每个人为FieldField所做的事情都会看一看;

>>> 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'

因此MEDIA_URL应该是您的网络服务器配置为提供MEDIA_ROOT中存储的文件的网址。