如何将 django-user-agents 与 class ListViews 一起使用

How to use django-user-agents with class ListViews

我正在构建一个博客,我有不同的移动版和桌面版模板,我已经成功地实现了 user_agent 标识,用于为我的所有功能寻址移动版或桌面版模板,如下所示:

def about(request):
    user_agent = get_user_agent(request)

    if user_agent.is_mobile:
        return render(request, 'about-mobile.html')
    
    elif user_agent.is_pc:
        return render(request, 'about.html')

但是,一旦我必须将它实现到 ListView 类,我真的不知道该怎么做!

class homepage(ListView):
    model = DeathAd
    template_name = 'homepage.html'
    ordering = ['-id']
    paginate_by = 5

您可以覆盖 .get_template_names() method [Django-doc]。此方法 returns 模板列表,然后按列表的顺序尝试:

class homepage(ListView):
    model = DeathAd
    template_name = 'homepage.html'
    ordering = ['-id']
    paginate_by = 5

    def <b>get_template_names</b>(self, *args, **kwargs):
        user_agent = get_user_agent(self.request)
        if user_agent.is_mobile:
            return ['about-mobile.html']
        elif user_agent.is_pc:
            return ['about.html']
        return super().get_template_names(*args, **kwargs)