クラスベースのビューを呼び出そうとしていて、それを実行できますが、何らかの理由で、呼び出している新しいクラスのコンテキストを取得できません
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)
私は間違った人を何をしていますか?
の代わりに
ShowAppsView.as_view()(self.request)
私はこれをしなければなりませんでした
return ShowAppsView.as_view()(self.request)
multiple inheritance in python=の使用を開始すると、物事はより複雑になるため、継承されたミックスインからのコンテキストで簡単にコンテキストを踏みにじることができます。
取得するコンテキストと必要なコンテキスト(新しいコンテキストを定義するのではない)は明確に示されていないため、完全に診断することは困難ですが、ミックスインの順序を並べ替えてみてください。
_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
では呼び出されません。