上傳我使用Django-CMS的一個項目,並在前端(模板)我想從一個文件夾中選擇一個隨機圖像的文件夾的隨機文件。如何選擇從哪裏Django的文件管理器
媒體是由Django的文件管理器進行管理。我知道如何在我的模型中直接指定文件時使用這些文件,但我無法弄清楚是否以及如何選擇隨機圖像。
爲了更好地理解,我有一個模型,在那裏我可以選擇圖像。如果這不是編輯設置的,我想選擇一個隨機圖像作爲備份。
上傳我使用Django-CMS的一個項目,並在前端(模板)我想從一個文件夾中選擇一個隨機圖像的文件夾的隨機文件。如何選擇從哪裏Django的文件管理器
媒體是由Django的文件管理器進行管理。我知道如何在我的模型中直接指定文件時使用這些文件,但我無法弄清楚是否以及如何選擇隨機圖像。
爲了更好地理解,我有一個模型,在那裏我可以選擇圖像。如果這不是編輯設置的,我想選擇一個隨機圖像作爲備份。
爲了解決這個問題,我不得不使用文件管理器的文件夾模式。這是我的型號:
class HeroExtension(TitleExtension):
image = FilerImageField(
blank=True,
null=True
)
def get_hero_image(self):
if self.image:
return self.image
folder = Folder.objects.filter(name='Heros')
if folder:
file = random.choice(folder.first().files)
if file:
return file
return None
首先我返回模型的圖像,如果它被設置。如果沒有,我尋找特定的文件夾,並從中選擇一個隨機圖像。
如果發現什麼都沒有,我在圖像將被退回任何其他情況下返回None
。
我的模板看起來是這樣的:
{% if request.current_page.get_title_obj.heroextension.get_hero_image %}
{% with hero_image=request.current_page.get_title_obj.heroextension.get_hero_image %}
<img class="hero__image"
alt="{{ hero_image.default_alt_text }}"
srcset="{{ hero_image|thumbnail_url:'hero-450' }} 800w,
{{ hero_image|thumbnail_url:'hero-576' }} 1024w,
{{ hero_image|thumbnail_url:'hero-768' }} 1360w,
{{ hero_image|thumbnail_url:'hero-1080' }} 1920w"
sizes="100vw"
src="{{ hero_image|thumbnail_url:'hero-1080' }}">
{% endwith %}
{% endif %}
在你設置的路徑添加到圖像加載的媒體文件夾。例如
RANDOM_IMAGES = '%s/fallback_images/' % MEDIA_ROOT
然後你就可以創建一個模板標籤,簡單地列出圖像在媒體文件夾,並採取一個隨機。
您的代碼可能是這樣的:
import random
import os
from django import template
from django.conf import settings
register = template.Library()
@register.simple_tag
def random_image():
list_images = os.listdir(path=settings.RANDOM_IMAGES)
return random.choice(list_images)
在你的模板
現在,那麼你可以使用這樣的事情
{% if mymodel.image %}
... do something with the image provided by the model
{% else %}
use the tag `random_image`
{% endif %}
不知道,但你可以使用達到相同default
{{ mymodel.image|default:random_image }}
查看有關模板標籤的文檔以及如何構建其中:https://docs.djangoproject.com/en/1.11/howto/custom-template-tags/
是在數據庫中引用的隨機圖像? –
我不知道說實話,我對django比較陌生。我可以說的是,我在filer中創建了文件夾,並且用它上傳了所有圖像。因爲我可以在Filer中編輯圖像的元數據,所以我想在數據庫中必須有某種參考。 – thomas