我按照教程创建了一个缩略图,用于在模板中上传和发布文件和图像。我用的是Django 1.6对于一个与缩略图字段相关的get_method()版本,上传图像或文本的位置显示在下面的html one_labeling_index.html中,但未打开;对于第二个版本,sorl -缩略图,它在使用“浏览”-上传按钮后完全没有显示任何内容。
在models.py中
from sorl.thumbnail import get_thumbnail
from django.core.files.base import ContentFile
# instance, is instance from django and filename is name of uploaded file
# formats str to filename format str
def get_upload_file_name(instance,filename):
return "uploaded_files/%s_%s" % (str(time()).replace('.', '_'), filename)
class Labeling(models.Model):
sentence = models.CharField(max_length=200)
datetime = models.DateTimeField()
title = models.CharField(max_length=70)
current_count = models.IntegerField()
label = models.CharField(max_length=200)
# thumbnail field
thumbnail = models.FileField(upload_to=get_upload_file_name)
def __unicode__(self):
return self.sentence
class OneLabeling_Phrase(models.Model):
sentence = models.CharField(max_length=200)
label = models.CharField(max_length=200)
thumbnail = models.FileField(upload_to=get_upload_file_name)在views.py中
def LabelingIndex(request):
labels = Labeling.objects.all()
return render(request,"labeling_index.html", {"labels":labels})
def one_labeling(request,postID):
one_labeling = Labeling.objects.get(id=postID)
if request.method == 'POST':
form = LabelingForm(request.POST, request.FILES)
if form.is_valid():
postonelabeling(request, one_labeling)
else:
form = LabelingForm()
m = {"form":form, "one_labeling":one_labeling}
m.update(csrf(request))
return render_to_response('one_labeling_index.html', m)在forms.py中
class LabelingForm(forms.ModelForm):
class Meta:
model = Labeling
fields = ('title', 'current_count', 'sentence', 'label', 'thumbnail')在urls.py中
url(r'^labeling$', LabelingIndex),
url(r'^labeling(?P<postID>\d+)$',one_labeling),在html labeling_index.html中
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
{% for one_labeling in labels %}
<h2><a href="/labeling{{ one_labeling.id}}">{{ one_labeling.title }}</a></h2>
<p>{{ one_labeling.sentence }}</p>
<p>{{ one_labeling.label }}</p>
{% for c in one_labeling.onelabeling_phrase.set_all %}
<p>{{ one_labeling.sentence }}</p>
<p>{{ one_labeling.label }}</p>
<p>{{ one_labeling.thumbnail }}</p>
{% endfor %}
{% endfor %}
</body>
</html>在one_labeling_index.html中
{% load static %}
{% load thumbnail %}
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">{% csrf_token %}
<ul>
{{ one_labeling.thumbnail}}
{{form.as_ul}}
<p><img src="{% get_static_prefix %}{{one_labeling.get_thumbnail}}" width="200"/></p>
# with soal - thumbnail
{% thumbnail item.image my_size_string crop="left" as im %}
<img src="{{thumbnail.labeling}}"width="200">
{% empty %}
<p>No image</p>
{% endthumbnail %}
</ul>
</body>
</html>发布于 2015-04-06 15:37:22
上传图像或文本的位置显示在下面的html one_labeling_index.html中,但未打开。
我不知道这意味着什么,但我想你的意思是空间在那里,但没有图像显示。在本例中,之所以会发生这种情况,是因为您将一个<img>与一个中断的源放在一起。其余部分根本没有显示任何内容,因为代码被破坏了。
这里缺少一些元素。例如,我不确定变量item来自何处?不管怎样,你用错了sorl-缩略图。看一下文档中的示例。记住,您有thumbnail item.image AS im,这意味着您的图像对象现在被引用'im‘。我有属性url,宽度,高度。所以你的代码应该是:
{% thumbnail one_labeling.thumbnail '200x200' crop="left" as im %}
<img src="{{ im.url }}" width="{{ im.width }}" heigh="{{ im.height }}">
{% empty %}
<p>No image</p>
{% endthumbnail %}get_thumbnail是sorl-缩略图的一个方法,而不是你的模型,所以你不能说{{ one_labeling.get_thumbnail }},除非你真的在标签模型中创建了这个方法。如果您想从模型中设置sorl缩略图:
from sorl.thumbnail import get_thumbnail
class Labeling(models.Model):
pass
def get_thumb(self):
im = get_thumbnail(thumbnail, '200x200', crop='center', quality=99)
return im.url # remember that sorl objects have url/width/height attributes因此,在模板中您可以拥有:
<img src="{{ one_labeling.get_thumb }}" />希望这能有所帮助。
https://stackoverflow.com/questions/29472364
复制相似问题