2010-04-18 5 views
0

Actuellement un peu coincé, se demandant si quelqu'un peut aider. J'utilise django-adminfiles. Ce qui est une petite application soignée. Je veux l'utiliser pour insérer des images dans des articles/articles/pages pour un site que je construis.Balise de modèle Django, générant une balise de bloc de gabarit

Comment django-adminfiles fonctionne est il insère un espace réservé i.e < < < ImageFile >>> et cela est rendu en utilisant un modèle django. Il a également la particularité d'insérer des options personnalisées i.e (Insérer une image moyenne), j'ai pensé que je l'utiliserais pour redimensionner automatiquement les images et les inclure dans le post (similaire à la façon dont WP le fait). Django-adminfiles utilise l'application sorl.thumbnail pour générer des miniatures.

j'ai donc essayé d'essais miniatures générant:

Le modèle actuel qui est utilisé pour rendre l'image insérée est:

{% 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 %} 

J'ai essayé de modifier ceci:

{% 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 %} 

I obtenir l'erreur:

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

J'ai pensé que la vignette avait besoin du chemin absolu, donc j'ai essayé de le mettre dans le gabarit, et cela fonctionne.

i.e. ceci fonctionne:

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

Donc, fondamentalement, j'ai besoin pour générer le chemin absolu du fichier donner le chemin relatif (à la racine web). Vous pouvez le faire en transmettant le paramètre MEDIA_ROOT au modèle, mais la raison pour laquelle je veux créer une balise de gabarit est de définir par programme la taille de l'image.

Mise à jour Essayé ce que par réponse ci-dessous:

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 

Modèle:

{% 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 %} 

Répondre

0

SORL a besoin d'un emplacement du système de fichiers, car il est un processus côté service. En supposant que votre adresse de système de fichiers reflète vos adresses Web, vous devriez être en mesure de créer un custom filter pour convertir les emplacements de fichiers.

MISE À JOUR

je proposais quelque chose comme ceci:

{% thumbnail upload.upload.url|path 200x50 %} 
+0

Comment ça marcherait? comme Thumbnail est aussi une balise, pouvez-vous avoir deux balises i.e {% thumbnail filter%} – ismail

+0

Salut Juste testé cela, et cela fonctionne. Cependant, le problème est que vous insérez un img src = avec un chemin absolu sur votre serveur. Ne semble pas correct. Mettra à jour la question avec ce que j'ai. – ismail

+0

Salut, merci, mais comme indiqué, il insère l'URL absolue (sur le serveur) dans le imr src – ismail

Questions connexes