2012-01-13 3 views
13

я получил следующую модель в мое приложение Django:Как получить URL-адрес ImageField в шаблоне?

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? (Я укоренился вокруг в каталоге шаблонов администратора, но не могу найти то, что я ищу.)

+2

Вам просто нужно, чтобы получить доступ .path и .url на самом поле изображения - так 'image.image.path', 'Image.image.url'. Как и вы, вы пытаетесь получить доступ к этим атрибутам экземпляра модели, где они не существуют. – AdamKG

ответ

30

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

1

Изменить код этого :

<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, заключается в том, что у вас нет поля в вашем классе Image в ваших моделях.

-6

Создать папку «статический» в вы Джанго проект и добавить к вы файл настройки

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

Если у вас нет этой строки в настройках вы будете файл также добавить его

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

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

{% static image.image.url %} 
+2

Это не сработает, потому что поля поля изображения не связаны со статическими файлами !! – azuax

Смежные вопросы