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 %}
Comment ça marcherait? comme Thumbnail est aussi une balise, pouvez-vous avoir deux balises i.e {% thumbnail filter%} – ismail
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
Salut, merci, mais comme indiqué, il insère l'URL absolue (sur le serveur) dans le imr src – ismail