Djangoにはmedia
およびstatic
に似たurl
タグがありますか?
{% static 'styles/boo.css' %}
{% url 'some_app:some_name' %}
Is this possible: {% media 'what here' %}?
設定方法は?
{% get_media_prefix %}
が必要です。
設定方法は説明されています ドキュメント内 :設定でMEDIA_ROOT
とMEDIA_URL
を設定し、MEDIA_URL
をurls.py
に追加する必要があります。
いいえ、メディアテンプレートタグはありません。
MEDIA_ROOT
およびMEDIA_URL
を設定すると、url
属性を参照することにより、テンプレートでメディアファイルを使用できます。
例えば:
class Foo(models.Model):
image = models.ImageField(
...
)
そして、あなたのテンプレートで:
<img src="{{ foo_object.image.url }}">
メディアファイルへのアクセス方法 に関するドキュメントもご覧ください。
{%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
メディアファイルの場合は、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