I am trying to incorporate django-schedule into my project. Django-schedule s source is here. I don t like the urls, because they all capture a slug. My project will only allow one calendar per user, so it doesn t make sense to capture the slug. So, I wrapped the django-schedule views like this (look up the slug using the current user, and pass it to django-schedule s views):
from schedule.views import calendar_by_periods
from schedule.models import Calendar
from schedule.periods import Month
def cal_by_periods_wrapper(view):
def new_view(request, *args, **kwargs):
kwargs[ calendar_slug ] = Calendar.objects.get_calendars_for_object(obj=request.user, distinction="owner")[0].slug
return view(request, *args, **kwargs)
return new_view
And here is the relevant section from urls.py:
urlpatterns = patterns( ,
url(r ^$ ,
cal_by_periods_wrapper(calendar_by_periods),
name = "month_calendar",
kwargs={ periods : [Month], template_name : schedule/calendar_month.html }),
This works fine until it hits one of the template tags included with django-schedule, prev_url:
@register.simple_tag
def prev_url(target, slug, period):
return %s%s % (
reverse(target, kwargs=dict(calendar_slug=slug)),
querystring_for_date(period.prev().start))
This function raises:
TemplateSyntaxError at /teacher/calendar/
Caught an exception while rendering: Reverse for month_calendar with arguments
() and keyword arguments { calendar_slug : u asdf } not found.
How can I wrap this view and still make the reverse call work?