我想用Django显示一张图片,它已经保存在mysql数据库中了。在所有的方法中,我发现有人使用models.Imagefield(upload_to='path')
,但我认为这会将文件保存到这个目录中,其他计算机的用户以后将无法访问。
所以问题是,如何直接访问数据库并显示图片而不在中间保存?在
我已经在python中成功地做到了这一点,但我不太确定如何将代码实现到models.py
中。
我的方法是这样的:
class mysqlpicture(models.Model):
#mysqlpic=something?
def openpic():
connection = pymysql.connect(user='root', passwd='***',
host='localhost',
database='db')
cursor = connection.cursor()
sql1='select * from Pictures'
cursor.execute(sql1)
data=cursor.fetchall()
mysqlpic=io.BytesIO(data[1][0])#one means second element of column zero
#img=Image.open(mysqlpic)
#img.show()
cursor.close()
return mysqlpic
然后我在views.py
中尝试将mysqlpic
直接给予httpresponse,如下所示:
使用模板pic.html
插入图片,如:
{% for n in query_results %}
<mysqlpic src="{{ n.mysqlpic.url }}" />
{% endfor %}
有人知道怎么用正确的方法来做吗?在
是的,使用ImageField确实允许其他计算机的用户以后访问它。它继承FileField中的所有属性和方法,这些属性和方法将文件上载到服务器中,路径在upload\u to中指定,并将此路径保存到数据库中以保留其引用。所有这些都是在模型实例中调用save()方法时发生的。在
然后,您可以通过调用您的_instance.image_字段.url。还记得看一下MEDIA_ROOT和MEDIA_URL,它们分别告诉Django保存文件的服务器根路径和处理来自media\uroot的媒体的url。在
您可以为此目的使用^{} 。在
但正如django文档中所述:
然后要在模板中显示,可以将二进制数据转换为base64:
^{pr2}$模板:
相关问题 更多 >
编程相关推荐