【问题标题】:How to show ad banner depends on datetime?如何显示广告横幅取决于日期时间?
【发布时间】:2020-09-03 22:59:28
【问题描述】:

我正在尝试制作一个小算法来在包含三个横幅的容器内显示广告,但不是一次显示所有横幅,我想每天只显示一个。

假设每个横幅都必须在特定日期时间出现,如下所示:

ads = [
    {   
        'banner': f'{ads_path}/1/ad_1917_175.gif',
        'dtime': datetime.now() + timedelta(minutes=1)
    },
    {
        'banner': f'{ads_path}/2/ad_1917x175.gif',
        'dtime': datetime.now() + timedelta(minutes=2)
    },
    {
        'banner': f'{ads_path}/3/ad_1917x175_2.gif',
        'dtime': datetime.now() + timedelta(minutes=3)
    }
]

所有横幅都保存在数据库中,我可以通过它的偏移量过滤每个横幅,我还创建了一个 datetime.now() 变量以将其与查询中的 dtime 进行比较,如下所示:

dtime_now = datetime.now()
get_banner = Ads.query.filter(Ads.dtime < dtime_now).offset(1).limit(1)

我想从这里开始,如果数据库中的所有日期都小于当前时间,则迭代将转到第一个横幅。

dtimes = [datetime.strptime(str(item.dtime), '%Y-%m-%d %H:%M:%S.%f') for item in get_ads]`

我尝试将所有 dtimes 的列表合并到一个 datetime 对象中,然后查看结果是否小于当前时间,这意味着转到第一个横幅更改它 dtime 并显示它等等。

但 Python 不会让你这样做,因为它只是结合了 timedelta

有什么建议可以让它发挥作用吗?最好的方法是什么?

【问题讨论】:

    标签: python-3.x flask flask-sqlalchemy


    【解决方案1】:

    不确定我是否遵循您的逻辑,但您不需要数据库来执行此操作。怎么样:

    ad_change_times = [datetime_1, datetime_2, datetime_3]
    
    for i in range(len(ad_change_times)): # or range(1, len(ad_change_times)+1) if you insist on counting from 1
      if datetime.now() > ad_change_times[i]:
        banner = f'{ads_path}/{i}/ad_1917_175.gif',
        break
    

    然后,将其发送到您的模板。

    【讨论】:

    • 会的!逻辑非常接近!我需要通过它们创建一个迭代来显示特定日期的每个横幅! timedelta(minutes=1) 只是一个例子,事实上我想让每个人每天都出现所以timedelta(days=1) 等等直到月底让我们说。我使用数据库的原因是因为,我不希望每次向服务器发送请求时都会更改计划的日期时间,如果日期时间已经过去,我更喜欢在更改之前保存为静态值,所以我可以再给它一个新值
    • 在我的代码中,ad_change_times 是静态的。您可以对其进行硬编码。或者,您可以存储在数据库中并查询以获取广告更改天数。例如:datetime_1 = datetime(2020,9,10), datetime_2 = datetime(2020,9,11)
    • 噢噢耶!谢谢伙伴),我以为我最终会得到至少十行代码,这真的是我现在在我的 VSCode 中的一个失误,只是尝试使用我拥有的逻辑随机的东西。再次感谢你真的帮了很多忙,我会在此基础上添加一些强大的东西:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 2015-01-06
    • 1970-01-01
    相关资源
    最近更新 更多