Ожидается недопустимый тег блока «пустой» или «конец для». Ошибка при попытке отображения ImageField - PullRequest
2 голосов
/ 13 апреля 2019

я пытаюсь использовать ImageField из библиотеки подушек.И у меня есть проблема с этим.

Когда я пытаюсь показать свое изображение, я получаю ошибку:

TemplateSyntaxError в / home Недопустимый тег блока в строке 62: 'articulo.nombre_imagen.url', ожидается' пустой 'или' endfor '.Вы забыли зарегистрировать или загрузить этот тег?

это моя строка 62:

<a href="article/id/{{articulo.id}}"><img class="card-img-top" img src="{% articulo.nombre_imagen.url %}" alt=""></a>

, так как вы можете использовать, я правильно использую синтаксис, хорошо, я добавил ...

это из моих models.py:

def upload_location(instance, filename):
return "static/img/" %(instance.id, filename)

class Articulo(models.Model):

nombre_imagen=models.ImageField(upload_to=upload_location,
    null=True, blank=True, 
    width_field="width_field", 
    height_field="height_field")
width_field=models.IntegerField(default=0)
height_field=models.IntegerField(default=0)

Кто-нибудь может помочь?Спасибо!

Ответы [ 2 ]

1 голос
/ 13 апреля 2019

Попробуйте использовать {{ }} вместо {% %}:

<a href="article/id/{{ articulo.id }}"><img class="card-img-top" src="{{ articulo.nombre_imagen.url }}" alt=""></a>

UPDATE.

В шаблоне:

<a href="article/id/{{ articulo.id }}"><img class="card-img-top" src="{% url 'preload_image' pk=articulo.pk %}" alt=""></a>

В просмотрах:

def preload_image(request, pk)
    from .models import Articulo
    from django.http import HttpResponse
    from PIL import Image

    articulo = get_object_or_404(Articulo, pk=pk)

    img = Image.open(articulo.nombre_imagen.path)
    response = HttpResponse(content_type='image/%s' % img.format)
    img.save(response, img.format)
    response['Content-Disposition'] = 'filename="image.%s"' % img.format
    return response

Также вставьте этот метод preload_image в urls.py; и где from .models используйте свой from APPNAME.models.

0 голосов
/ 14 апреля 2019

Проблема решена! если кто-то хочет знать ответ, я просто добавляю функцию, чтобы показать свое действительное изображение:

def preload_image(request, pk)
from .models import Articulo
from django.http import HttpResponse
from PIL import Image

articulo = get_object_or_404(Articulo, pk=pk)

img = Image.open(articulo.nombre_imagen.path)
response = HttpResponse(content_type='image/%s' % img.format)
img.save(response, img.format)
response['Content-Disposition'] = 'filename="image.%s"' % img.format
return response

В моем urls.py я добавил URL:

url(r'^home', index, name='home'), it: url(r'^preload/(?P<pk>\d+)$', views.preload_image, name='preload_image'), 

И, наконец, я изменяю свою строку, чтобы использовать ее с функцией:

<img class="card-img-top" src="{% url 'home:preload_image' pk=articulo.pk %}" alt="">

спасибо большое @Сергей РОДНЕВ!

...