Django a-t-il une balise media
similaire à static
et url
et comment la configurer?
{% static 'styles/boo.css' %}
{% url 'some_app:some_name' %}
Is this possible: {% media 'what here' %}?
Comment l'installer?
Vous avez besoin {% get_media_prefix %}
.
La façon de le configurer est expliquée dans la documentation : vous devez définir le MEDIA_ROOT
et le MEDIA_URL
dans vos paramètres et ajoutez le MEDIA_URL
à ton urls.py
.
Non, il n'y a pas de balise de modèle de média.
Après avoir défini MEDIA_ROOT
et MEDIA_URL
vous pouvez utiliser un fichier multimédia dans un modèle en vous référant à son attribut url
.
Par exemple:
class Foo(models.Model):
image = models.ImageField(
...
)
puis dans votre modèle:
<img src="{{ foo_object.image.url }}">
Jetez également un œil aux documents sur comment accéder aux fichiers multimédias .
{% get_media_prefix%} et {{MEDIA_URL}} via le processeur de contexte sont tous deux de bonnes alternatives pour ce que vous demandez.
Cela étant dit, si ce que vous voulez vraiment réaliser, c'est rendre un lien vers un fichier multimédia téléchargé tel qu'une image, il y a une meilleure façon.
Modèle:
class Company(models.Model):
logo = models.ImageField()
@property
def logo_url(self):
if self.logo and hasattr(self.logo, 'url'):
return self.logo.url
Modèle:
<img src="{{company.logo_url}}"/>
La raison de @property est que vous voulez éviter les cas où ImageField ne contient pas d'image. Accès à company.logo.url
directement dans le modèle provoquera une exception dans un tel cas.
Il s'agit en fait d'un problème de longue date dans Django: https://code.djangoproject.com/ticket/13327
Pour les fichiers multimédias que j'utilise Django-imagekit
Utilisation de base:
from Django.db import models
from imagekit.models import ProcessedImageField
from imagekit.processors import ResizeToFill
models.py
class Photo(models.Model):
owner = models.ForeignKey(Project, on_delete=models.CASCADE)
photos = ProcessedImageField(upload_to='pagename/images',
processors=[ResizeToFill(900, 600)],
format='JPEG',
options={'quality': 90})
settings.py
INSTALLED_APPS = [
'Django.contrib.admin',
'Django.contrib.auth',
'Django.contrib.contenttypes',
'Django.contrib.sessions',
'Django.contrib.messages',
'Django.contrib.staticfiles',
'imagekit',
]
.html
{% load imagekit %}
{% thumbnail '100x50' source_file %}
Lire la documentation - https://pypi.python.org/pypi/Django-imagekit