我正在尝试学习如何在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'
答案 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
中存储的文件的网址。