Sorl 缩略图未在模板中打开图像(Django)

Sorl thumbnail not opening image in template (Django)

我按照教程创建了用于在模板中上传和发布文件内容和图像的缩略图。我正在使用 Django 1.6。对于与缩略图字段相关的 get_method() 的一个版本,上传图像或文本的位置显示在下面的 html one_labeling_index.html 中但未打开,对于第二个版本,sorl - 缩略图,使用 "Browse" - 上传按钮后,它根本不显示任何内容。

在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),

在htmllabeling_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>

the place for uploaded image or text shows in the html one_labeling_index.html below but unopened

我不确定这是什么意思,但我想你的意思是 space 在那里,但没有显示图像。在这种情况下,发生这种情况是因为您放置了一个带有损坏源的 <img>。其余的根本没有显示任何内容,因为代码已损坏。

这里缺少一些元素。例如,我不确定变量 item 来自哪里?无论如何,您使用的 sorl-thumbnail 是错误的。 Take a look at the examples in the docs。请记住,您有 thumbnail item.image AS im,这意味着您的图像对象现在被 '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-thumbnail 的方法,而不是您的模型,因此您不能说 {{ one_labeling.get_thumbnail }} 除非您实际在 Labeling 模型中创建了此方法。如果你想从模型中设置 sorl-thumbnail:

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 }}" />

希望对您有所帮助。