私は標準投票アプリを改善しています。
そこには、多くのビューで繰り返す必要があるコードがいくつかあります。次のような、リンクに数を投稿するためのさまざまな投票 (アクティブ、非アクティブ、人気) の数をカウントするコード:
1) すべてのアクティブな投票 (投票数) を表示します。
2) 終了したすべての投票 (投票数) を表示します。等
実際のところ、このコードを何度も繰り返す必要があるため、デコレータを作成することにしました。
def count_number_of_various_polls(func):
def count():
# Count the number of active polls.
all_active_polls = Poll.active.all()
num_of_active_polls = len(all_active_polls)
# Count the number of inactive polls.
all_inactive_polls = Poll.inactive.all()
num_of_inactive_polls = len(all_inactive_polls)
# Count the number of popular polls per the last month.
popular_polls = Poll.popular.filter(pub_date__gte=timezone.now()
- datetime.timedelta(days=days_in_curr_month))
num_of_popular_polls = len(popular_polls)
func()
return count
次に、ビューを装飾したいと思いindex
ます。
@count_number_of_various_polls
def index(request):
latest_poll_list = Poll.active.all()[:5]
return render(request, 'polls/index.html', {
'latest_poll_list': latest_poll_list,
'num_of_popular_polls': num_of_popular_polls,
'num_of_active_polls': num_of_active_polls,
'num_of_inactive_polls': num_of_inactive_polls
})
開発サーバーで投票インデックス ページを開こうとすると、次のエラーが表示されます。
TypeError at /polls/
count() takes no arguments (1 given)
1の引数が何であるかわかりません。問題はどこだ?