我能够使用template标签在模板中打印正确的对象pk,但是当我在url参数中使用相同的代码时,它不会显示。
我正在尝试使用多对多关系的第一个结果pk创建一个链接到该页面的url参数。手动输入pk时可以使用,但是使用category.quote_set.first.pk
时不能使用。
“类别”是所有类别的查询集,与报价有多对多的关系。
<p>{{ category.quote_set.first.pk }}</p>
<p><a href="{% url 'mottos:quote' category.quote_set.first.pk %}"></a></p>
该网址文件包含path('motto/<int:pk>/', views.QuoteView.as_view(), name='quote'),
转到页面显示错误Reverse for 'quote' with arguments '('',)' not found. 1 pattern(s) tried: ['motto\\/(?P<pk>[0-9]+)\\/$']
我相信这样做的原因是首先创建了url,然后在页面之后创建了category.quote_set.first.pk,但这只是我的理论。
查看页面:
class CategoryView(generic.ListView,ContextMixin):
template_name = 'mottos/category.html'
context_object_name = 'motto_list'
def get_queryset(self):
return Quote.objects.all().annotate(score=Avg('vote__score')).filter(categories__slug=self.kwargs['cat
egory'])。order_by('-score')
答案 0 :(得分:1)
尝试类似的方法
{% for quote in quote_list %}
<p>
<a href="{{ quote.get_absolute_url }}"></a>
</p>
{% endfor %}
另一种解决方案: 在您认为的文件中添加以下内容:
def get_context_data(self, **kwargs):
context['quote_list'] = Quote.objects.all().annotate(score=Avg('vote__score')).filter(categories__slug=self.kwargs['category']).order_by('-score')
return context
然后在您的模板中添加
{% for quote in quote_list %}
<p>
<a href="{% url 'quote' quote.id %}"></a>
</p>
{% endfor %}
答案 1 :(得分:0)
我能够通过使用
获得报价pk。{% for quote in category.quote_set.all|slice:"0:1" %}
<p><a href="{% url 'mottos:quote' quote.pk %}"></a></p>
% endfor %}
由于我只想要第一个引号,所以我使用slice:“ 0:1”仅获得了第一个引号,然后使用该结果中的pk。