这是一个巨大的新手错误,但我无法弄明白。
这就是我想做的事情:
我有一个页面显示一个对象可用年份的列表。 我想要的是,当我点击一年时,它会带我到相应的YearArchiveView。我只是没有成功将正确的参数传递给URL。传递模板标签显然不起作用,所以正确的方法是什么?
我收到此错误:
TemplateSyntaxError at /receipts/
Could not parse some characters: |{{y||date:"Y"}}
我的模板:
<ul>
{% for y in years_available %}
<li><a href="{% url 'receipt_year_archive' year={{y|date:"Y"}} %}">{{y|date:"Y"}}</a></li>
{% empty %}
<p>No Receipt Yet</p>
{% endfor %}
</ul>
我的观点:
class ReceiptListView(LoginRequiredMixin, ListView):
model = Receipt
template_name = 'receipts.html'
def get_queryset(self):
queryset = Receipt.objects.dates('date_created','year',order="DESC")
return queryset
def get_context_data(self, *args, **kwargs):
context = super(ReceiptListView, self).get_context_data(**kwargs)
context['years_available'] = Receipt.objects.dates('date_created',
'year', order="DESC")
return context
我的urls.py:
url(r'receipts/(?P<year>[0-9]{4}/$)',views.ReceiptYearArchiveView.as_view(),
name='receipt_year_archive'),
答案 0 :(得分:1)
您无法在{{
内添加其他}}
和{%
。它应该使用直接变量调用。
<ul>
{% for y in years_available %}
<li><a href="{% url 'receipt_year_archive' y|date:'Y' %}">{{ y|date:"Y" }}</a></li>
{% empty %}
<p>No Receipt Yet</p>
{% endfor %}
</ul>
但是,我认为您的案例与this docs examples类似:
<ul>
{% for yearvar in year_list %}
<li><a href="{% url 'news-year-archive' yearvar %}">{{ yearvar }} Archive</a></li>
{% endfor %}
</ul>
如果
years_available
的输出是整数年的列表。 例如:[1992,2001,2005,2011,2014] 它应该是:
<ul>
{% for y in years_available %}
<li><a href="{% url 'receipt_year_archive' y %}">{{ y }}</a></li>
{% empty %}
<p>No Receipt Yet</p>
{% endfor %}
</ul>
答案 1 :(得分:0)
你不需要年份=
只需使用此
<ul>
{% for y in years_available %}
{% with y|date:"Y" as current_year %}
<li><a href="{% url 'receipt_year_archive' current_year %}">{{y|date:"Y"}}</a></li>
{% endwith %}
{% empty %}
<p>No Receipt Yet</p>
{% endfor %}
</ul>