Как получить URL-адрес ImageField в шаблоне? - PullRequest
15 голосов
/ 13 января 2012

В моем приложении Django есть следующая модель:

class Image(models.Model):
    image = models.ImageField(
        upload_to='images/', 
        height_field='height', 
        width_field='width'
    )
    credit = models.CharField(max_length=50, blank=True)
    caption = models.TextField(blank=True)
    article = models.ForeignKey(Article)
    width = models.PositiveIntegerField(
        blank = True, null = True,
        editable = False,
        default = 0
    )
    height = models.PositiveIntegerField(
        blank = True, null = True,
        editable = False,
        default = 0
    )

Я установил MEDIA_ROOT в каталог с именем / hmedia / внутри моего веб-корня Apache и для MEDIA_URL установлено значение'http://localhost/hmedia/'.Похоже, это сработало - я успешно загрузил пару изображений через сайт администратора Django, и я могу просмотреть эти изображения через http://localhost/hmedia/images/[filename].И сайт администратора Django фактически показывает мне имя файла и ссылки на действующий URL для каждого изображения, и ссылки работают.

Моя проблема в том, что я не могу понять, как получить URL или имена файловэти изображения в моем шаблоне:

<ul>
{% for image in article.image_set.all %}
    <li>Caption: "{{image.caption}}", Credit: "{{image.credit}}", URL: "{{image.url}}"</li>
{% endfor %}
</ul>

Приведенный выше шаблон приводит к следующему выводу:

<ul>

    <li>Caption: "here's an image caption", Credit: "some photographer", URL: ""</li>

    <li>Caption: "Another caption here", Credit: "Another photographer", URL: ""</li>

</ul>

Другими словами, он правильно выводит свойства заголовка и кредита для каждого изображения, но онничего не выводит для {{image.url}}.

Как получить URL изображения в моем шаблоне?Как шаблон интерфейса администратора Django делает это?(Я бродил в каталоге шаблонов администратора, но не могу найти то, что ищу.)

Ответы [ 3 ]

33 голосов
/ 13 января 2012

Вам нужно {{ image.image.url }} & {{ image.image.path }}, а {{ image }} - просто объект изображения

1 голос
/ 13 января 2012

Измените свой код на это:

<ul>
{% for image in article.image_set.all %}
    <li>Caption: "{{ image.caption }}", Credit: "{{ image.credit }}", URL: "<a href ='/{{ image.image }}'{{ image.image }}</a>"</li>
{% endfor %}
</ul>

Измените {{image.url}} на {{image.image}}, потому что «.image» содержит местоположение изображения.Причина, по которой вы не получаете никакого значения от .url, заключается в том, что у вас нет URL поля в вашем классе Image в ваших моделях.

0 голосов
/ 19 сентября 2014

Создайте папку «static» в своем проекте django и добавьте ее в свой файл настроек

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

Если у вас нет этой строки в вашем файле настроек, также добавьте ее

BASE_DIR = os.path.dirname(os.path.dirname(__file__))

Теперь в шаблоне вы можете использовать

{% static  image.image.url %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...