web-dev-qa-db-fra.com

django balise url média

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?

12
Daniel Miliński

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.

17
LostMyGlasses

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 .

25
Leistungsabfall

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

5
elnygren

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

2
FirePower