django-imagekit - лучший способ показать изображение по умолчанию?
Я использую django-imagekit, чтобы изменить размеры своих аватаров пользователя и сейчас, чтобы отобразить аватар по умолчанию (если пользователь не загрузил свой аватар), я делаю это:
views.py
try:
usr_avatar = UsrAvatar.objects.get(user=request.user.id)
except UsrAvatar.DoesNotExist:
usr_avatar = UsrAvatar.objects.get(id='0')
template.html
<img src="{{ usr_avatar.avatar_image.url }}" >
Это работает нормально, но каждый раз, когда пользователь не загружает свой аватар, я попадаю в базу данных для изображения аватара по умолчанию.
Есть ли способ устранить попадание в базу данных, когда у пользователя нет загруженного изображения аватара, так как он приписывает ссылку на изображение по умолчанию usr_avatar
или просто что-то делаете в template.html? Спасибо!
1 ответ
Апп имя пользователя с учетом вашего вопроса!
Вы можете создать контекстный процессор, который обеспечивает аватар по умолчанию для каждого шаблона и просто убедиться, что контекстный процессор кэширует изображение
settings.py
TEMPLATE_CONTEXT_PROCESSORS = (
...
'myapp.context_processors.default_avatar',
...
)
MyApp / context_processors.py
from django.core.cache import cache
def default_avatar(request):
default_avatar = cache.get('default_avatar', False)
if not default_avatar:
default_avatar = UsrAvatar.object.get(id='0')
return {
'default_avatar' : default_avatar
}
Теперь переменная шаблона default_avatar доступна в каждом шаблоне:
{% if usr_avatar %}
{{ usr_avatar }}
{% else %}
{{ default_avatar }}
{% endif %}
В качестве альтернативы просто используйте кеш в исходном запросе:
try:
usr_avatar = UsrAvatar.objects.get(user=request.user.id)
except UsrAvatar.DoesNotExist:
usr_avatar = cache.get('default_avatar', False)
if not usr_avatar:
usr_avatar = UsrAvatar.objects.get(id='0')
Но, наконец, может быть даже лучше вообще избежать сохранения аватара по умолчанию в базе данных и вместо этого просто написать процессор контекста, как описано выше, но вместо того, чтобы получать аватар по умолчанию из БД, просто иметь статический URL-адрес изображения
from django.conf import settings
def default_avatar(request):
return {
'default_avatar' : '%simages/default_avatar.jpg' % settings.STATIC_URL
}