Django 具有get_absolute_url的NoReverseMatch
我有一个由queryset对象组成的链接列表。单击每个链接应将我带到该对象的详细视图。但我得到了以下错误:Django 具有get_absolute_url的NoReverseMatch,django,django-models,django-views,Django,Django Models,Django Views,我有一个由queryset对象组成的链接列表。单击每个链接应将我带到该对象的详细视图。但我得到了以下错误: NoReverseMatch at/idea\u tracker/shoppinglist/ 找不到“视图.收件人详细信息”的反转视图。“收件人详细信息”不是有效的视图函数或模式名称。 我的模型: class Recipient(models.Model): first_name = models.CharField(max_length=30) last_name = m
NoReverseMatch at/idea\u tracker/shoppinglist/
找不到“视图.收件人详细信息”的反转视图。“收件人详细信息”不是有效的视图函数或模式名称。
我的模型:
class Recipient(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
birthday = models.CharField(max_length=10, blank=True)
notes = models.TextField(max_length=255, blank=True)
def __str__(self):
return "{} {}".format(self.first_name, self.last_name)
def get_absolute_url(self):
return reverse(
'views.recipient_detail',
args=(),
kwargs={'recipient_id': str(self.id)}
)
class Gift(models.Model):
name = models.CharField(max_length=30, blank=True)
model_number = models.CharField(max_length=30, blank=True)
price = models.DecimalField(default=0.00, decimal_places=2,
max_digits=6)
recipients = models.ManyToManyField(Recipient, blank=True)
purchased = models.BooleanField(default=False)
def __str__(self):
return "{}".format(self.name)
我的看法:
def shopping_list(request):
recipients =
models.Recipient.objects.prefetch_related('gift_set').\
all().order_by('last_name')
gift_list = models.Gift.objects.all()
total = []
for y in gift_list:
total.append(y.price)
total_price = sum(total)
return render(request, 'idea_tracker/shoppinglist.html', {
'recipients': recipients,
'total_price': total_price
})
def recipient_detail(request, pk):
recipient = get_object_or_404(models.Recipient, pk=pk)
gift = recipient.gift_set
return render(request, 'idea_tracker/recipient_detail.html', {
'recipient': recipient
})
我的网址:
urlpatterns = [
url(r'^shoppinglist/', views.shopping_list, name='shopping_list'),
url(r'^recipient_detail/(?P<recipient_id>)/$',
views.recipient_detail, name='recipient_detail'),
]
urlpatterns=[
url(r“^shoppinglist/”,views.shopping\u list,name='shopping\u list'),
url(r“^recipient\u detail/(?P)/$”,
views.recipient\u detail,name='recipient\u detail'),
]
我的模板:
<h3> Click on a Recipient to edit or delete:</h3>
{% for name in recipients %}
<ul>
<li><a href="{{ name.get_absolute_url }}">{{ name.first_name }}
{{ name.last_name }} /
{% for gift in name.gift_set.all %}
<span style='color:darkblue'>{{ gift }}</span></a></li>
{% endfor %}
</ul>
{% endfor %}
单击收件人以编辑或删除:
{收件人%中的名称为%}
{%endfor%}
{%endfor%}
您应该使用url模式的名称收件人\u详细信息
:
return reverse(
'recipient_detail',
args=(),
kwargs={'recipient_id': str(self.id)}
)
您的收件人\u id
组为空。例如,您可以将数字与以下匹配:
url(r'^recipient_detail/(?P<recipient_id>\d+)/$',
views.recipient_detail, name='recipient_detail'),
url(r'^recipient\u detail/(?P\d+)/$),
views.recipient\u detail,name='recipient\u detail'),
最后,您应该在
recipient\u detail
视图中将pk
更改为recipient\u id
,以匹配URL模式。我已经生锈,没有设置来验证这一点,但是IIRC URL中的命名捕获组转换为视图的kwarg,但是您的recipient\u details
函数未设置为使用名为recipient\u id
的kwarg。作为def recipient\u detail(请求,收件人id):
maybe?这本身并不能解决问题,但它需要解决,并且是解决方案的一部分。非常感谢。这起作用了。我很好奇为什么用相反的方法将“views.recipient\u detail”改为“recipient\u detail”会奏效?非常感谢你的帮助!获取URL模式名称,在您的示例中,该名称是'recipient\u detail'
,因为您有name='recipient\u detail'
。