Сначала вы выбираете текущий день, а затем можете получить атрибуты year
, month
и day
, например:
from datetime import <b>date</b>
def author_blog_images(instance, filename):
td = <b>date.today()</b>
return f'blog-images/{instance.author.username}/{<b>td.year</b>}/{<b>td.month</b>}/{<b>td.day</b>}/{filename}'
Здесь td.month
и td.day
будут не с ведущими нулями (поэтому будет напечатано как 2019/5/30
, не 2019/<b>0</b>5/30
). Однако вы можете использовать начальные нули в строке формата, например:
from datetime import <b>date</b>
def author_blog_images(instance, filename):
td = <b>date.today()</b>
return f'blog-images/{instance.author.username}/{td.year}/{td.month<b>:02d</b>}/{td.day<b>:02d</b>}/{filename}'
или мы можем использовать конкретное форматирование даты:
from datetime import <b>date</b>
def author_blog_images(instance, filename):
td = date.today().<b>strftime('%y/%b/%d')</b>
return f'blog-images/{instance.author.username}/{<b>td</b>}/{filename}'
Мы также можем использовать, как @ BearBrown говорит , Джанго timezone.now
[Django-doc] :
from django.utils import timezone
def author_blog_images(instance, filename):
td = <b>timezone.now()</b>.strftime('%y/%b/%d')
return f'blog-images/{instance.author.username}/{td}/{filename}'
мы можем даже вставить f-string в качестве параметра в strftime
, например, @ chepner говорит для замены определенных частей ранее, а затем разрешить формат strftime
time
со строкой форматирования, созданной f-строкой:
from django.utils import timezone
def author_blog_images(instance, filename):
return timezone.now().strftime(<b>f'</b>blog-images/{instance.author.username}/%y/%b/%d/{filename}<b>'</b>)
Однако здесь следует учитывать крайний случай: если instance.author.username
или filename
содержит элементы форматирования, такие как %d
и %b
, то strftime
заменит их на день / месяц / ... соответственно. Хотя это не очень распространено, это то, что нужно учитывать.
Еще одна вещь, которую вы должны принять во внимание, это то, что при изменении author
или username
файл будет не переименован, поэтому он все равно будет содержать имя старого автора. (или старое имя пользователя этого автора).