Доступ к объекту запроса из представления на основе классов?Необходимо определить, поступает ли запрос с мобильного устройства - PullRequest
0 голосов
/ 10 июля 2019

У меня есть следующий 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 и еще много чего.просто снова посадите меня в ту же ситуацию.

1 Ответ

2 голосов
/ 10 июля 2019

Вы можете получить доступ к запросу, используя 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...