web-dev-qa-db-ja.com

django media url tag

Djangoにはmediaおよびstaticに似たurlタグがありますか?

{% static 'styles/boo.css' %}
{% url 'some_app:some_name' %} 

Is this possible: {% media 'what here' %}?

設定方法は?

12

{% get_media_prefix %} が必要です。

設定方法は説明されています ドキュメント内 :設定でMEDIA_ROOTMEDIA_URLを設定し、MEDIA_URLurls.pyに追加する必要があります。

17
LostMyGlasses

いいえ、メディアテンプレートタグはありません。

MEDIA_ROOTおよびMEDIA_URLを設定すると、url属性を参照することにより、テンプレートでメディアファイルを使用できます。

例えば:

class Foo(models.Model):
    image = models.ImageField(
        ...
    )

そして、あなたのテンプレートで:

<img src="{{ foo_object.image.url }}">

メディアファイルへのアクセス方法 に関するドキュメントもご覧ください。

25
Leistungsabfall

{%get_media_prefix%} および {{MEDIA_URL}} via context processor は、どちらもあなたが求めるものの良い代替手段です。

そうは言っても、本当に達成したいのが、画像などのアップロードされたメディアファイルへのリンクをレンダリングすることである場合、より良い方法があります。

モデル:

class Company(models.Model):
    logo = models.ImageField()

    @property
    def logo_url(self):
        if self.logo and hasattr(self.logo, 'url'):
            return self.logo.url

テンプレート:

<img src="{{company.logo_url}}"/>

@propertyの理由は、ImageFieldに画像が含まれていない場合を避けるためです。このような場合、テンプレートでcompany.logo.urlに直接アクセスすると例外が発生します。

これは実際にはDjangoの長年の問題です: https://code.djangoproject.com/ticket/13327

5
elnygren

メディアファイルの場合は、Django-imagekit
基本的な使用:

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

ドキュメントを読む- https://pypi.python.org/pypi/Django-imagekit

2
FirePower