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

时间:2019-07-10 20:53:52

标签: python django python-3.x django-views django-class-based-views

我有以下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似乎无权访问请求对象。在这种情况下有什么方法可以访问该对象?

我知道可以创建一个标准视图,但是稍后我想继续使用CreateView之类的CBV和诸如此类的东西,这将再次使我陷入相同的境地。

1 个答案:

答案 0 :(得分:2)

您可以使用function clean_login_url_cleaner( $url ) { $query_args = array( 'authentication', 'updated', 'created', 'sent', 'restore' ); return esc_url( remove_query_arg( $query_args, $url ) ); } 访问请求。此逻辑的最佳位置是self.request

get_template_names