2013-04-10 39 views
1

我想更新舊的Django項目(Django的,在最後1.4工作)使用基於類的通用視圖(在Django的1.5)Django的TemplateSyntaxErrors基於類的觀點

下面用來工作

模板:

{% block content %} 
    {% for month in date_list %} 
     <h2><a href="{% url coltrane_entry_archive_month year,month|date:"b" %}">{{ month|date:"F" }}</a></h2> 
     <h2>Blah</h2> 
    {% endfor %} 
{% endblock %} 

urls.py

urlpatterns = patterns('django.views.generic.date_based', 
... 
    (r'^(?P<year>\d{4})/$', 'archive_year', dict(entry_info_dict,make_object_list=True), 'coltrane_entry_archive_year'), 
    (r'^(?P<year>\d{4})/(?P<month>\w{3})/$', 'archive_month', entry_info_dict, 'coltrane_entry_archive_month'), 
... 
) 

但是當我ü pdated的urls.py使用泛型類

class ArticleYearArchiveView(YearArchiveView): 
    queryset = Entry.objects.all() 
    date_field = "pub_date" 
    make_object_list = True 
    allow_future = True 

urlpatterns = patterns('', 
... 
    url(
     r'^(?P<year>\d{4})/$', 
     ArticleYearArchiveView.as_view(), 
     name='coltrane_entry_archive_year' 
    ), 
    url(
     r'^(?P<year>\d{4})/(?P<month>\w{3})/$', 
     dates.MonthArchiveView.as_view(
      template_name='coltrane/entry_archive_month.html', 
      queryset=Entry.objects.filter(status=Entry.LIVE_STATUS), 
      date_field='pub_date'), 
     name="coltrane_entry_archive_month" 
    ), 
... 
) 

以下TemplateSyntaxError開始出現:

無法解析某些字符:一年|,月||日期: 「B」

我可以呈現模板,並檢查什麼正在通過使用到coltrane_entry_archive_month如下:

{% for month in date_list %} 
    {{ year }} 
    {{ month|date:"b" }} 
{% endfor %} 

我沒有ñ注意{{year}}被渲染爲'Jan. 1,2013'而不是'2013',它與url中的正則表達式匹配。這我不明白。

Futher然後我試圖呈現如下:

{% for month in date_list %} 
    {% url "coltrane_entry_archive_month" "2013","apr" %} 
{% endfor %} 

沒有喜悅,此時TemplateSyntaxError是:

無法解析餘數: ' 「四月」' 從「「2013 「,」apr「'

在Django中,泛型類視圖和url似乎都是很大的主題,所以任何指針都會非常受歡迎!

+0

' 「{%URL coltrane_entry_archive_month年月|日期:」 B 「%}」'應該是' '{%URL coltrane_entry_archive_month年月|日期: 「B」 %}'' – karthikr 2013-04-10 19:13:40

+0

karthikr - 謝謝。我已經接受了下面的答案,但在此感謝您的意見和解決方案。 – jayuu 2013-04-10 20:07:18

回答

1

url標記不採用逗號分隔的參數,只是用空格列出它們。

{% for month in date_list %} 
    {% url "coltrane_entry_archive_month" "2013" "apr" %} 
{% endfor %} 

,這意味着你需要在你實際的模板改爲

{% url "coltrane_entry_archive_month" year month|date:"b" %} 

也只有一個音符(我注意到你跟着你的第二個例子)

不要忘了把引號放在函數路徑或模式名稱周圍!

在Django 1.5中更改:第一個參數不用引用, 與其他模板標籤不一致。由於Django 1.5,其 根據通常的規則進行評估:它可以是帶引號的字符串 或將在上下文中查找的變量。

+0

赫赫不會是我第一次被困在逗號......謝謝你的答案,它的工作。一個有爭議的問題,但我不得不將{{year}}更改爲{{month | date:「Y」}}以適應url模式 - 否則我會得到一個NoReverseMatch錯誤。我不確定爲什麼它不像以前那樣渲染。 – jayuu 2013-04-10 20:04:25

+0

只要注意到您發佈到模板標籤中的鏈接的鏈接 - 這很好,我沒有設法在幫助中找到它。 – jayuu 2013-04-10 20:13:35

+0

它看起來像是作爲日期傳遞的,如果它正在輸出爲'Jan. 1,2013'所以使用日期過濾器應該沒問題。至於它爲什麼這樣做,我也不知道...... – Ngenator 2013-04-10 20:17:00