2010-01-19 78 views
2

我试图将Django的时间表到我的项目。 Django的时间表的来源是here。我不喜欢这些网址,因为它们都捕获了一个slu。。我的项目只允许每个用户使用一个日历,所以捕获slu it没有意义。所以,我包了Django的时间表的看法是这样的(查找使用当前用户的蛞蝓,并把它传递给Django的日程安排的意见):Django的 - 倒车包裹视图功能

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 

这里是从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'}), 

这工作得很好,直到它击中的模板标签中的一个包含Django的时间表,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)) 

此功能提高:

TemplateSyntaxError at /teacher/calendar/ 

Caught an exception while rendering: Reverse for 'month_calendar' with arguments 
'()' and keyword arguments '{'calendar_slug': u'asdf'}' not found. 

我如何包装这一观点,仍然使反向调用工作?

回答

1

这有什么好做包装的功能。这只是你不再有名为“month_calendar”这需要一个“calendar_slug”参数的URL。在你的urlconf中定义一个,或者编辑templatetag。

在评论后编辑是的,但'reverse'调用仍然通过slug参数,并且没有'month_calendar'url需要一个,所以反向匹配失败。

+0

我以为这是什么名称=“month_calendar”在我的urls.py是...而且重点是,我试图摆脱url的calendar_slug。我错过了什么吗? – UrLicht 2010-01-19 21:23:19

+0

看到我上面的编辑。 – 2010-01-19 21:38:57

+0

好了,对不起,这是现在做了意义。我认为它所抱怨的观点是视图函数的参数,而不是URL。所以,真的,我唯一的选择是修改模板标签以不通过slug。得到它了。谢谢。 – UrLicht 2010-01-19 21:43:01