2010-01-19 44 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