Mixin在每个页面加载时返回一个随机对象

2024-05-29 10:59:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个mixin,动态地生成一个随机的Amazon广告。我不确定这是否是处理事情的最佳方式(例如,在模型本身中定义一个返回随机项的方法是否更好。。。但我在这里。你知道吗

我有两个应用程序:eventsadvertisements。我在advertisements.views中的mixin看起来像:

class AmazonAdvertisingMixin(object):

    config = {
        # Amazon Config
    }
    api = amazonproduct.API(cfg=config)

    # Get all ads from the database
    ads = Advertisement.objects.filter(network__exact='Amazon')

    if len(ads) > 0:
        ad = random.choice(ads)

        # Get the ASIN from a random ad
        asin = ad.ASIN

        result = api.item_lookup(asin, ResponseGroup='Images, Small')

        advertisement = {
            'product_url': result.Items.Item['DetailPageURL']
        }

        def get_context_data(self, **kwargs):
            context = super(AmazonAdvertisingMixin, self).get_context_data(**kwargs)
            context['advertisement'] = self.advertisement
            return context

然后在我的events.views中,我有一个FormView,它看起来如下所示:

class ContactFormView(AmazonAdvertisingMixin, FormView):

    form_class = ContactForm
    template_name = "contact.html"

    # etc, etc...

这非常适合在联系人页面上显示广告。唯一的问题是…当我刷新页面时,广告总是一样的。好像混音只有一次。有没有办法让它在每次加载页面时重新运行,这样我就可以获取一个新的asin?你知道吗

对于实现最终目标,我也愿意接受其他建议:在每个页面加载时,从数据库中随机选择一个advertisement。思想?你知道吗


Tags: selfamazoncontext页面eventsmixinadviews
1条回答
网友
1楼 · 发布于 2024-05-29 10:59:23

我很确定广告代码只在进程启动时运行一次。模型不是为每个页面请求重新加载,而是初始化一次

如果您将广告逻辑放在get_context_data中,它应该在每个请求上加载一个随机广告,因为每个请求都会调用get_context_data

我问了一个similar问题:

Class attributes are shared across all instances of the class within a process, and since a process lasts across many requests, the data will persist across those requests.

相关问题 更多 >

    热门问题