Как мне узнать, отображается ли изображение на веб-странице?(Джанго шаблоны) - PullRequest
0 голосов
/ 04 августа 2011

У меня есть этот код, проблема в том, что немногие изображения имеют имена, но в соответствии с именами файлов нет, как я могу узнать, отображаются ли изображения, я имею в виду утверждение if чего-то подобного.

<img src="{{ STATIC_URL }}images/{{web.image}}" />

Приведенный выше код используется для рендеринга моего изображения django в шаблоне.Спасибо.

Ответы [ 5 ]

1 голос
/ 04 августа 2011

Я бы сделал это на стороне клиента, с помощью JavaScript, просто Google что-то вроде: "загруженное изображение JavaScript" или что-то.

0 голосов
/ 16 августа 2011

наконец-то я нашел решение, используя эскиз sorl: http://thumbnail.sorl.net/examples.html#template-examples

{% thumbnail item.image my_size_string crop="left" as im %}
    <img src="{{ im.url }}">
{% empty %}
    <p>No image</p>
{% endthumbnail %}

это работает для меня.

0 голосов
/ 05 августа 2011

Если web на самом деле является объектом базы данных, к которому вы обращаетесь (как, кажется, указывает ваш комментарий), и это «изображение» - это ImageField, вы можете использовать следующее:

{% if web.image %}
    <img src="{% web.image.url %}" />
{% else %}
    <img src="{{ STATIC_URL }}images/MyDefaultImage.png" />
{% endif %}

Таким образомшаблон предоставит изображение только в том случае, если оно существует, и предоставит альтернативное изображение, если нет.

Я заранее извиняюсь, если неправильно понял ваш вопрос, я не уверен, что все правильно понял.

0 голосов
/ 04 августа 2011

Было бы довольно сложно определить в шаблоне, существует ли файл на самом деле или нет. Это была бы работа представления, предполагая, что {{web.image}} фактически возвращает что-либо в первую очередь.

def my_view(request):
    # some code here
    import os
    if os.path.exists(web.image_path): # for example
        context = { 'web': web }
    render_to_response('my_template.html', context, RequestContext(request)

Предполагается, что вы действительно знаете полный путь файловой системы к файлу изображения. Это не всегда так, особенно с приложением staticfiles в django 1.3.

Однако я был бы гораздо более обеспокоен тем, что иногда изображения существуют, а иногда нет. Почему это так? Изображения по какой-то причине удаляются? Если это так, вам нужен способ очистки базы данных.

Edit:

Поскольку, похоже, вам еще не понравился ответ, попробуйте следующее:

import os
class MyModel(models.Model):
    image = models.Image...
    # the rest of your fields

    def get_image_url(self):
        if os.path.exists(self.image.path):
            return u'/%s/img/%s' % (self.app_label, self.image.filename)
        return u'%s/img/default.jpg' % self.app_label

В своем шаблоне вы затем делаете следующее:

<img src="{{ STATIC_URL }}{{ web.get_image_url }}" />
0 голосов
/ 04 августа 2011

Вы говорите, что URL, расширенный из {{STATIC_URL}} images / {{web.image}}, приводит к ошибке 404 Not Found? И вы хотите выяснить, кто из них это делает?

Вам действительно нужно протестировать эти URL в вашем представлении, используя некоторый код Python - возможно, что-то из urllib - но если этот URL находится на том же сервере, что и тот, на котором запущено представление, он может просто зависнуть на вас.

...