django 媒体 url 标签
Posted
技术标签:
【中文标题】django 媒体 url 标签【英文标题】:django media url tag 【发布时间】:2016-05-19 05:54:12 【问题描述】:django 是否有类似于static
和url
的media
标签以及如何设置它?
% static 'styles/boo.css' %
% url 'some_app:some_name' %
Is this possible: % media 'what here' %?
如何设置?
【问题讨论】:
我也有同样的问题,怎么解决? 【参考方案1】:没有媒体模板标签。
设置MEDIA_ROOT
和MEDIA_URL
后,您可以通过引用其url
属性在模板中使用媒体文件。
例如:
class Foo(models.Model):
image = models.ImageField(
...
)
然后在您的模板中:
<img src=" foo_object.image.url ">
另外,请查看有关 how to access media files 的文档。
【讨论】:
我做了同样的方法问题是 django 3.2 我使用了我的 url ``` path('homes', include("page_home.urls"))``` 只工作但我想加载图像在索引网址中path('', include("page_home.urls"))
【参考方案2】:
你需要% get_media_prefix %
。
设置方法解释in the docs:您必须在设置中设置MEDIA_ROOT
和MEDIA_URL
,并将MEDIA_URL
添加到您的urls.py
。
【讨论】:
如果你使用 wagtail 则先加载静态模板标签:% load static %
【参考方案3】:
对于媒体文件,我使用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
【讨论】:
【参考方案4】:% 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 媒体 url 标签的主要内容,如果未能解决你的问题,请参考以下文章
django 模板标签 url 仅在最后一个空 url 模式时有效