2016-05-17 11 views
0

imを使用している前月を取得し、URLを使用して前月の年月日を送信しました。私はそれをクリックしたときにdjango - 空のテンプレートの代わりにeventmonthview 404とMonthArchiveViewを使用して

は、しかし、私は次のように404を取得する:

Page not found (404) 
Request Method: GET 
Request URL: http://it.service.com/maintenance/previous/2016/04/ 
Raised by: maintenance.views.EventMonthArchiveView 
No Planned IT Maintenance available 

私はそれは、代わりにこの空のページが表示されない理由を知りませんか?私はこの代わりに空のテンプレートを取得していないはずですか?

また、ユーザーが以前のリンクを再度クリックした場合、URLから現在の月/年を取り除いてから1か月を取り除く方法を知りたい(前の月を前にクリックするたびに

views.py

from django.views.generic.list import ListView 
from django.shortcuts import get_object_or_404, render, render_to_response 
from django.http import HttpResponse 
from datetime import date, datetime, timedelta, time 

from django.views.generic.dates import MonthArchiveView 

from .models import Maintenance 
from .models import MaintenanceType 
from .models import ServiceType 

# Create your views here. 
def index(request): 
    today = date.today() 
    ObjMaintenance = Maintenance.objects.filter(StartTime__gt=today) 

    return render(request, 'maintenance/index.html', { 
     'Maintenance': ObjMaintenance, 
    }) 

def thirtydays(request): 
    today = date.today() 
    previous_month = (today.replace(day=1) - timedelta(1)).replace(day=1) 
    ObjMaintenance = Maintenance.objects.filter(StartTime__gt=today-timedelta(days=30)) 

    return render(request, 'maintenance/previous.html', { 
     'Maintenance': ObjMaintenance, 
     'previous_month': previous_month, 
     'Title': 'Maintence in the Last 30 Days', 
    }) 

def previous(request, year, month): 
    previousMnths = datetime 
    ObjMaintenance = Maintenance.objects.filter(StartTime__gt=today-timedelta(days=30)) 

    strPrevious = 'Maintence for the month %s' % (previous_month) 
    return render(request, 'maintenance/previous.html', { 
     'Maintenance': ObjMaintenance, 
     'previous_month': previous_month, 
     'Title': strPrevious, 
    }) 

def upcoming(request): 
    today = date.today() 
    ObjMaintenance = Maintenance.objects.filter(StartTime__gt=today+timedelta(days=30)) 

    return render(request, 'maintenance/index.html', {'Maintenance': ObjMaintenance,})  

class EventMonthArchiveView(MonthArchiveView): 
    template_name = "maintenance/previous.html" 
    queryset = Maintenance.objects.all() 
    date_field = "StartTime" 
    allow_future = False 

urls.py

app_name = 'maintenance' 
urlpatterns = [ 
    url(r'^$', views.index, name='index'), 
    url(r'^thirtydays/$', views.thirtydays, name="thirtydays"), 
    url(r'^previous/(?P<year>[0-9]{4})/(?P<month>[0-9]+)/$', 
     EventMonthArchiveView.as_view(month_format='%m'), 
     name="previous"), 
    url(r'^upcoming$', views.upcoming, name='upcoming'), 
] 

テンプレートURL

<a href="{% url 'maintenance:previous' previous_month|date:'Y' previous_month|date:'m' %}"><< Previous Maintenance</a> 
+0

私は月アーカイブビューは既にあなたが望むように動作すると思います。 2016年5月のページでは、 'previous_month'は' 2016-04-01'、2016年4月のページでは 'previous_month'は' 2016-03-01'になります。 – Alasdair

答えて

2

イベントがないときに404の代わりに空のリストを表示するには、月アーカイブビューの場合はallow_emptyTrueと設定します。

class EventMonthArchiveView(MonthArchiveView): 
    template_name = "maintenance/previous.html" 
    queryset = Maintenance.objects.all() 
    date_field = "StartTime" 
    allow_future = False 
    allow_empty = True 
関連する問題