【问题标题】:NameError at week/2012/48/ global name '_get_next_prev_month' is not definedNameError at week/2012/48/ 全局名称 '_get_next_prev_month' 未定义
【发布时间】:2012-11-13 12:51:45
【问题描述】:

我正在尝试使用 weekarchive 视图,但出现以下错误:

NameError at /archive/week/2012/48/
global name '_get_next_prev_month' is not defined 
Request Method: GET
Request URL:    http://localhost:8000/archive/week/2012/48/
Django Version: 1.4.2
Exception Type: NameError
Exception Value:    
global name '_get_next_prev_month' is not defined
Exception Location: /job/views.py in get_next_week, line  79
Python Executable:  /jobenv/bin/python
Python Version: 2.7.3

这是我的视图继承自的子类:

class BetterWeekArchiveView(WeekArchiveView):

def get_next_week(self, date):
    """
    Get the next valid week.
    """
    from datetime import timedelta
    next = date + timedelta(days=7)
    return _get_next_prev_month(self, next, is_previous=False, use_first_day=False)

def get_previous_week(self, date):
    """
    Get the previous valid week.
    """
    from datetime import timedelta
    prev = date - timedelta(days=7)
    return _get_next_prev_month(self, prev, is_previous=True, use_first_day=False)

def get_dated_items(self):
    """
    Return (date_list, items, extra_context) for this request.
    Inject next_week and previous_week into extra_context.
    """
    result = super(BetterWeekArchiveView, self).get_dated_items()
    extra_context = result[2]
    date = extra_context['week']

    extra_context.update({
        'next_week': self.get_next_week(date),
        'previous_week': self.get_previous_week(date),
    })
    return result

这是视图:

class week_archive(BetterWeekArchiveView):
   model=Job
   allow_future =True
   allow_empty=True
   paginate_by=12
   date_field='datemade'
   template_name='task/task_archive_week'

   def get_queryset(self):
       return Job.objects.filter(author=self.request.user)

我从How do I paginate WeekArchiveView? 得到了这个 BetterWeekArchiveView()

我做错了什么?

【问题讨论】:

    标签: python django django-templates python-2.7 django-views


    【解决方案1】:

    似乎我错过了导入,我在源代码中找到了 _get_next_prev_month 的定义:Django-source-file 这应该是一个最小的工作示例:

    class BetterWeekArchiveView(WeekArchiveView):
        from django.views.generic.dates import _get_next_prev_month
        def get_next_week(self, date):
           """
            Get the next valid week.
            """
            from datetime import timedelta
            next = date + timedelta(days=7)
            return _get_next_prev_month(self, next, is_previous=False, use_first_day=False)
    
        def get_previous_week(self, date):
           """
           Get the previous valid week.
           """
           from datetime import timedelta
           prev = date - timedelta(days=7)
           return _get_next_prev_month(self, prev, is_previous=True, use_first_day=False)
    
        def get_dated_items(self):
            """
            Return (date_list, items, extra_context) for this request.
            Inject next_week and previous_week into extra_context.
            """
            result = super(BetterWeekArchiveView, self).get_dated_items()
            extra_context = result[2]
            date = extra_context['week']
    
            extra_context.update({
             'next_week': self.get_next_week(date),
              'previous_week': self.get_previous_week(date),
              })
    
             return result
    

    【讨论】:

      猜你喜欢
      • 2011-04-27
      • 1970-01-01
      • 2014-10-24
      • 2012-05-29
      • 2013-08-23
      • 2014-04-03
      • 2017-05-12
      • 2015-09-01
      相关资源
      最近更新 更多