Как использовать django-user-агенты с классом ListViews

#django #listview #user-agent

#django #listview #user-agent

Вопрос:

Я создаю блог, и у меня есть разные шаблоны для мобильных и настольных версий, я успешно внедрил идентификатор 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
 

Ответ №1:

Вы можете переопределить .get_template_names() метод [Django-doc]. Этот метод возвращает список шаблонов, которые затем проверяются в порядке списка:

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

    def get_template_names(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) 

Комментарии:

1. Этот парень — легенда, через 51 минуту после публикации моей пожизненной проблемы он решил ее.