Currenlty,我从http://www.lightbird.net/dbe/photo.html学习了django,我遇到了一个问题!我想在'缩略图项'上显示缩略图,但它只显示html代码:
<a href="/photos/1414.jpg><img border="0" alt="" src="/photos/1414.jpg" height="40"/></a>
我已经定义了类Image方法,如下所示:
def thumbnail(self):
return """<a href="/%s><img border="0" alt="" src="/%s" height="40"/> """ % ((self.image.name,self.image.name))
Class Image的属性定义如下:
class Image(Models.Model):
#The rest of another code
image=models.ManyToManyField(upload_to="photos/")
#....another code ..
我检查了我的路径是否在我的项目'myweb / photos /'上创建了照片 我怎样才能让页面理解它的HTML代码。
答案 0 :(得分:0)
请按照djangoproject.com上的教程进行操作..链接上的代码使用django不正确,关闭它并阅读官方文档
答案 1 :(得分:0)
使用url
属性代替图片上的name
属性:
def thumbnail(self):
return """<a href="/%s><img border="0" alt="" src="/%s" height="40"/> """ % ((self.image.url,self.image.url))
还有优秀的工具sorl-thumbnail。它有助于在模板中动态生成缩略图。使用pip install sorl-thumbnail
安装它。您可以像这样使用它:
<强> template.html 强>
{% load thumbnail %}
{% thumbnail item.image "100x100" crop="center" as im %}
<img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}">
{% endthumbnail %}
答案 2 :(得分:0)
首先,我不知道你为什么要在这个用例中使用ManyToMany
字段。您需要使用ImageField。
您定义为ImageField
的字段将具有url
属性,您可以使用该属性来引用文件的相对路径。
其次,不要在模型类中混合使用HTML和Python。 Django专门针对这个用例进行模板化:
from django.template.loader import render_to_string
class Image(models.Model):
image = models.ImageField(upload_to='photos')
alt = models.CharField(max_length=100)
def thumbnail(self):
return render_to_string('thumbnail.html', {'image': self})
# thumbnail.html
<img src="{{ image.image.url }}" alt="{{ image.alt }}" ... />
请记住,人为地将全尺寸图像缩放到40x40像素以生成缩略图是非常低效的,如果有很多这样的图像,绝对会压缩性能。
正如其他人所提到的,您可以使用优秀的库,例如django-easy-thumbnails或sorl-thumbnail来生成这些图片的正确,缩小,优化版本,无论您需要什么尺寸。