Тег шаблона Django, генерирующий тег блока шаблона - PullRequest
0 голосов
/ 19 апреля 2010

В настоящее время немного застрял, задаваясь вопросом, может ли кто-нибудь помочь. Я использую django-adminfiles . Который является аккуратным небольшим приложением. Я хочу использовать его для вставки изображений в посты / статьи / страницы сайта, который я создаю.

Как работает django-adminfiles, он вставляет заполнитель, т. Е. <<< ImageFile >>>, и это визуализируется с использованием шаблона django. Он также имеет функцию вставки пользовательских опций, т. Е. (Вставка среднего изображения), я подумал, что использовал бы это для автоматического изменения размера изображений и включения его в сообщение (аналогично тому, как это делает WP).

Django-adminfiles использует приложение sorl.thumbnail для создания миниатюр.

Итак, я попытался протестировать генерацию миниатюр:

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

{% spaceless %}
<img src="{{ upload.upload.url }}" width="{{ upload.width }}" height="{{ upload.height }}" class="{{ options.class }}" class="{{ options.size }}" alt="{% if options.alt %}{{ options.alt }}{% else %}{{ upload.title }}{% endif %}" />
{% endspaceless %}

Я пытался изменить это на:

{% load thumbnail %}
{% spaceless %}
<img src="{% thumbnail upload.upload.url 200x50 %}" width="{{ upload.width }}" height="{{ upload.height }}" class="{{ options.class }}" class="{{ options.size }}" alt="{% if options.alt %}{{ options.alt }}{% else %}{{ upload.title }}{% endif %}" />
{% endspaceless %}

Я получаю ошибку:

Exception Value:    
Caught an exception while rendering: Source file: '/media/uploads/DSC_0014.jpg' does not exist.

Я подумал, что миниатюре нужен абсолютный путь, поэтому попытался вставить его в шаблон, и это работает.

То есть это работает:

{% thumbnail '/Users/me/media/uploads/DSC_0014.jpg' 200x50 %}

Так что в основном мне нужно сгенерировать абсолютный путь к файлу, дать относительный путь (к корню сети). Вы можете сделать это, передав параметр MEDIA_ROOT шаблону, но причина, по которой я хочу сделать тег шаблона, заключается в том, чтобы программно установить размер изображения.

Обновление Попробовал это согласно ответу ниже:

templatetag:

from django import template
from proj.settings import MEDIA_ROOT

register = template.Library()

@register.filter(name='path')
def path(value):
    value = MEDIA_ROOT + '/' + value 
    return value

Шаблон:

{% load thumbnail %}
{% load images %}
{% spaceless %}
<img src="{{ upload.upload.url|path }}" width="{{ upload.width }}" height="{{ upload.height }}" class="{{ options.class }}" class="{{ options.size }}" alt="{% if options.alt %}{{ options.alt }}{% else %}{{ upload.title }}{% endif %}" />
{% endspaceless %}

1 Ответ

0 голосов
/ 19 апреля 2010

sorl нуждается в расположении файловой системы, поскольку это процесс на стороне службы. Предполагая, что адрес вашей файловой системы отражает ваши веб-адреса, вы сможете создать пользовательский фильтр для преобразования местоположений файлов.

UPDATE

Я предлагал что-то вроде этого:

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