gpt4 book ai didi

python - 如何将函数中的年月日传递给创建的相关目录?

转载 作者:行者123 更新时间:2023-11-28 20:55:36 26 4
gpt4 key购买 nike

我有一个模型:

def author_document_path(instance, filename):
return f"documents/{ instance.author.username }/%y/%m/%d/{filename}"


def author_blog_images(instance, filename):
return f"blog-images/{instance.author.username}/%y/%m/%d/{filename}"

class Blog(models.Model):
title = models.CharField(max_length=255)
# other fields
thumbnail = models.ImageField(upload_to=author_blog_images)
documents = models.FileField(upload_to=author_document_path)

在上面两个函数中传递 f"blog-images/{instance.author.username}/%y/%m/%d/{filename}" 的正确方法是什么,因为这些函数不会将年文件夹创建为 2019,将月文件夹创建为 5,将日文件夹创建为 30。上传受尊重的文件和图像后,目录如下所示:

enter image description here

这不是我想要的,我希望它看起来像:

enter image description here

你能帮我解决这个问题吗?非常感谢。

最佳答案

先获取当天,然后获取year , monthday属性,例如:

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.monthtd.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 says , Django 的 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 says替换之前的某些部分,然后让 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 ,该文件将不会重命名,因此它仍将保留旧作者的姓名(或该作者的旧用户名)。

关于python - 如何将函数中的年月日传递给创建的相关目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56379452/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com