[英]list index out of range django
有人可以解释一下为什么我回到list index out of range
,它出现在我的视图中的两个地方,第一个是在context_data = self.get_context_data(user_id, month, year, form=form)
和context['month'] = calendar.month_name[month]
,所以有人可以解释我的代码中发生了什么。 这是一个完整的Traceback
我的观点:
import calendar
import datetime
from django.contrib import messages
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from django.http import HttpResponseForbidden
from django.shortcuts import redirect, get_object_or_404
from django.views.generic.edit import FormView
from .helpers.user_util import get_user_full_name_or_user_name
from models import Rate
from statistics.forms import CommissionsMonthSelectionForm
from statistics.services import ManagerCommissionsProjectsCalculation, CommissionsAccessService
class UserSalesCommissionsView(FormView):
template_name = "statistics/user_sales_commissions.html"
form_class = CommissionsMonthSelectionForm
currency = Rate.EUR
def get(self, request, *args, **kwargs):
user_id = self.kwargs['user_id']
requesting_user = request.user
if CommissionsAccessService.can_view_commissions_page(requesting_user, user_id):
month = int(self.request.GET.get('month', datetime.datetime.now().month))
year = int(self.request.GET.get('year', datetime.datetime.now().year))
form = CommissionsMonthSelectionForm(initial={'year': year, 'month': month})
context_data = self.get_context_data(user_id, month, year, form=form)
return self.render_to_response(context_data)
else:
return HttpResponseForbidden('Access denied')
def post(self, request, *args, **kwargs):
user_id = self.kwargs['user_id']
requesting_user = self.request.user
if CommissionsAccessService.can_view_commissions_page(requesting_user, user_id):
form_class = self.get_form_class()
form = self.get_form(form_class)
if form.is_valid():
return self.form_valid(form, user_id)
else:
return self.form_invalid(form)
else:
return HttpResponseForbidden('Access denied')
def form_valid(self, form, user_id=None):
year = form.cleaned_data['year']
month = form.cleaned_data['month']
return redirect(self.get_success_url(user_id, month, year))
def form_invalid(self, form):
messages.add_message(self.request, messages.ERROR,
"Invalid data. Please check fields.")
return self.render_to_response(
self.get_context_data(form=form)
)
def get_success_url(self,
user_id=None,
year=datetime.datetime.now().year,
month=datetime.datetime.now().month):
return reverse("vinclucms_statistics:manager_commissions_statistics", user_id) + \
"?month=" + str(month) + "&year=" + str(year)
def get_context_data(self,
user_id=None,
year=datetime.datetime.now().year,
month=datetime.datetime.now().month,
**kwargs):
context = super(UserSalesCommissionsView, self).get_context_data(**kwargs)
context['user_name'] = get_user_full_name_or_user_name(get_object_or_404(User, pk=user_id))
context['can_view'] = True
context['currency'] = self.currency
context['month'] = calendar.month_name[month]
context['year'] = year
context['commissions'] = ManagerCommissionsProjectsCalculation.get_project_list(
self.currency, year, month, user_id)
return context
观点网址:
url(r'^statistics/commissions/sales/(?P<user_id>[^/]+?)/$', login_required(views.UserSalesCommissionsView.as_view()), name='user_sales_commissions')
这是get_context_data
的定义:
def get_context_data(self,
user_id=None,
year=datetime.datetime.now().year,
month=datetime.datetime.now().month,
**kwargs):
以下是它的名称:
context_data = self.get_context_data(user_id, month, year, form=form)
所以2个关键字参数( year
和month
)相反,产生类似calendar.month_name[2017]
东西,它会吐出Indexerror
。
您应该以正确的顺序传递参数,或者在处理关键字参数时,始终指定其名称:
context_data = self.get_context_data(user_id=user_id, month=month, year=year, form=form)
这样他们的订单就不再那么重要了。
可能还想检查PEP 3102 。
month = datetime.datetime.now().month # IF Current month is April then month==4
calendar.month_name[month]
一个数组,表示当前语言环境中一年中的月份。 这遵循1月的正常约定是月号1,因此它的长度为13,而month_name [0]是空字符串。
在这里: calendar.month_name[month]
检查什么是价值month
应该是4,因为当前的月份为4月。
所以你传递String需要一个datetime对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.