2013-04-10 65 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