Как проверить наличие аутентифицированного пользователя и затем показать другое содержимое в django

Я пытаюсь сделать два разных местоположения пользователя. Одно - из моей модели пользователя, а другое - по умолчанию из представления. Я хочу, чтобы каждый раз, когда пользователь аутентифицирован, отображалось местоположение из модели, но если он не вошел в систему, то в представление должно передаваться местоположение по умолчанию.

Views.py

class Home(generic.TemplateView):
    template_name = "Home.html"

    def get_context_data(self, **kwargs):
        context = super(Home, self).get_context_data(**kwargs)
        if User.is_authenticated:
            map_location = self.request.user.location_on_the_map
        else:
            map_location = Point(longitude, latitude, srid=4326)
            
            context.update({
                'job_listing': JobListing.objects.annotate(
                    distance=Distance("location_on_the_map", map_location)
                ).order_by("distance")[0:6]
            })
        return context

Измените это User.is_authenticated на self.request.user.is_authenticated

Вам нужно изменить строку User.is_authenticated на self.request.user.is_authenticated, чтобы убедиться, что вы ссылаетесь на текущего пользователя.

Альтернативно вы можете добавить параметр запроса в вашу функцию, таким образом, вы можете использовать request.user.is_authenticated вместо этого, как показано ниже:

class Home(generic.TemplateView):
template_name = "Home.html"

def get_context_data(self, request, **kwargs):
    context = super(Home, self).get_context_data(**kwargs)
    if request.user.is_authenticated:
        map_location = self.request.user.location_on_the_map
    else:
        map_location = Point(longitude, latitude, srid=4326)
        
        context.update({
            'job_listing': JobListing.objects.annotate(
                distance=Distance("location_on_the_map", map_location)
            ).order_by("distance")[0:6]
        })
    return context
Вернуться на верх