繁体   English   中英

Django模板URL未正确获取参数

[英]Django template url not correctly getting parameter

我可以使用模板标记在模板中打印正确的对象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]+)\\\\/$']错误Reverse for 'quote' with arguments '('',)' not found. 1 pattern(s) tried: ['motto\\\\/(?P<pk>[0-9]+)\\\\/$'] Reverse for 'quote' with arguments '('',)' not found. 1 pattern(s) tried: ['motto\\\\/(?P<pk>[0-9]+)\\\\/$']我相信这样做的原因是,首先创建了URL,然后创建了类别。 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(' - 得分“)

试试这个

{% for quote in quote_list %}
   <p>
      <a href="{{ quote.get_absolute_url }}"></a>
   </p>
{% endfor %}

另一个解决方案:在您的视图中,fie添加以下内容:

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 %}

我能够通过使用获取报价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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM