如何将日期(年)参数传递给我的网址?

时间:2017-12-22 15:25:42

标签: django django-templates

这是一个巨大的新手错误,但我无法弄明白。

这就是我想做的事情:

我有一个页面显示一个对象可用年份的列表。 我想要的是,当我点击一年时,它会带我到相应的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'),

2 个答案:

答案 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>