Подтвердить что ты не робот

Внешний вид класса Django Call Class из другого класса

Я пытаюсь вызвать представление на основе класса, и я могу это сделать, но по какой-то причине я не получаю контекст нового класса, который я вызываю

class ShowAppsView(LoginRequiredMixin, CurrentUserIdMixin, TemplateView):
    template_name = "accounts/thing.html"



    @method_decorator(csrf_exempt)
    def dispatch(self, *args, **kwargs):
        return super(ShowAppsView, self).dispatch(*args, **kwargs)

    def get(self, request, username, **kwargs):
        u = get_object_or_404(User, pk=self.current_user_id(request))

        if u.username == username:
            cities_list=City.objects.filter(user_id__exact=self.current_user_id(request)).order_by('-kms')
            allcategories = Category.objects.all()
            allcities = City.objects.all()
            rating_list = Rating.objects.filter(user=u)
            totalMiles = 0
            for city in cities_list:
                totalMiles = totalMiles + city.kms

        return self.render_to_response({'totalMiles': totalMiles , 'cities_list':cities_list,'rating_list':rating_list,'allcities' : allcities, 'allcategories':allcategories})


class ManageAppView(LoginRequiredMixin, CheckTokenMixin, CurrentUserIdMixin,TemplateView):
    template_name = "accounts/thing.html"

    def compute_context(self, request, username):
        #some logic here                        
        if u.username == username:
            if request.GET.get('action') == 'delete':
                #some logic here and then:
                ShowAppsView.as_view()(request,username)

Что я делаю с неправильными парнями?

4b9b3361

Ответ 1

Вместо

ShowAppsView.as_view()(self.request)

Мне пришлось это сделать

return ShowAppsView.as_view()(self.request)

Ответ 2

Все сложнее, когда вы начинаете использовать множественное наследование в python, чтобы вы могли легко портить свой контекст с помощью унаследованного mixin.

Вы не совсем говорите, какой контекст вы получаете и какой вы хотите (вы не определяете новый контекст), поэтому вам сложно полностью диагностировать, но попробуйте переупорядочить порядок ваших микшинов;

class ShowAppsView(LoginRequiredMixin, CurrentUserIdMixin, TemplateView):

это означает, что LoginRequiredMixin будет первым классом, наследуемым от, и поэтому он будет иметь приоритет над другими, если он имеет атрибут, который вы ищете, - если он не будет тогда, то python будет выглядеть в CurrentUserIdMixin и т.д.

Если вы хотите быть уверены, что получите контекст, который вам нужен, вы можете добавить переопределение, например

def get_context(self, request):
    super(<my desired context mixin>), self).get_context(request)

чтобы убедиться, что контекст, который вы получаете, - это тот, который вы хотите.

* Редактировать * Я не знаю, где вы нашли compute_context, но это не атрибут django, поэтому вызывается только из ShowAppsView.get() и никогда не в ManageAppView.