从基于类的视图中访问请求对象?需要确定请求是否来自移动设备

2024-03-29 14:43:11 发布

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

我有以下CBV:

class Index(TemplateView):
        template_name = 'index_app/index.html'

以及一个函数,该函数可以接收请求对象并返回其是否来自移动设备:

def mobileBrowser(request):

mobile_browser = False
ua = request.META['HTTP_USER_AGENT'].lower()[0:4]

if (ua in mobile_uas):
    mobile_browser = True
else:
    for hint in mobile_ua_hints:
        if request.META['HTTP_USER_AGENT'].find(hint) > 0:
            mobile_browser = True

return mobile_browser

我希望能够使用此功能在我的CBV中执行以下操作:

class Index(TemplateView):
if mobileBrowser(request):
    template_name = 'index_app/mobile/index.html'
else:
    template_name = 'index_app/index.html'

这是不可能的,因为CBV似乎没有访问请求对象的权限。在这种情况下,有没有办法访问此对象

我知道有可能创建一个标准视图,但是稍后我想继续使用CBV,比如CreateView和诸如此类的工具,这会让我再次陷入同样的境地


Tags: 对象namebrowserappindexifrequesthtml
1条回答
网友
1楼 · 发布于 2024-03-29 14:43:11

您可以使用self.request访问请求。这种逻辑的最佳位置是get_template_names

def get_template_names(self):
    if mobileBrowser(self.request):
        template_name = 'index_app/mobile/index.html'
    else:
        template_name = 'index_app/index.html'
    return template_name

相关问题 更多 >