django - Django 错误 NoReverseMatch at / Reverse for 'add-to-fav-songs' with arguments '('',)' not found
问题描述
所以我希望用户能够将歌曲添加到名为“最喜欢的歌曲”的部分(就像将产品添加到电子商务网站中的购物车一样),但我收到了这个错误NoReverseMatch at / Reverse for 'add-to-fav-songs' with arguments '('',)' not found. 1 pattern(s) tried: ['add\\-to\\-fav\\-songs/(?P<pk>[0-9]+)/$']
。谁能更正我的代码并告诉我如何将歌曲添加到favorite songs
. 提前致谢!
我的模型.py:
class Songs(models.Model):
title = models.CharField(max_length = 100)
lyrics = models.TextField()
author = models.CharField(max_length = 100)
track_image = models.CharField(max_length=2083)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('/', kwargs={'pk': self.pk})
我的意见.py:
def home(request):
context = {
'songs': Songs.objects.all()
}
return render(request, 'home.html', context)
@login_required
def add_to_fav_songs(request):
fav_song = get_object_or_404(Songs)
class Fav_songs(ListView):
model = Songs
template_name = 'fav_songs.html'
context_object_name = 'fav_song'
paginate_by = 2
def get_queryset(self):
return Songs.objects.filter(id=self.kwargs.get('pk'))
我的 urls.py:
path('add-to-fav-songs/<int:pk>/', views.add_to_fav_songs, name='add-to-fav-songs'),
path('favourite-songs/', Fav_songs.as_view(), name='favourite-songs'),
我的主页.html:
{% for song in songs %}
<article class="media content-section">
<div class="media-body">
<h2><a class="article-title" href="{% url 'song-detail' song.id %}">{{ song.title }}</a></h2>
<div class="article-metadata">
<a class="mr-2" href="{% url 'author-songs' song.author %}">{{ song.author }}</a>
</div>
<br>
<img class="card-img-bottom" height="339px" width="20px" src="{{ song.track_image }}">
</div>
<!-- <button> <a href="{% url 'add-to-fav-songs' object.id %}"></a> Add To Favourite Songs</button> -->
<form class="form" method="POST" action="{% url 'add-to-fav-songs' song.id %}">
{% csrf_token %}
<div class="action">
<button class="like btn btn-danger" type="button"><span class="fa fa-heart"></span></button>
</div>
</form>
</article>
{% endfor %}
我的 fav_songs.html:
{% for fav_song in songs %}
<article class="media content-section">
<div class="media-body">
<h2><a class="article-title" href="{% url 'song-detail' song.id %}">{{ fav_song.title }}</a></h2>
<div class="article-metadata">
<a class="mr-2" href="{% url 'author-songs' song.author %}">{{ fav_song.author }}</a>
</div>
<br>
<img class="card-img-bottom" height="339px" width="20px" src="{{ fav_song.track_image }}">
</div>
</article>
{% endfor %}
解决方案
您的代码中的第一个问题是您写道:
{% url 'add-to-fav-songs' object.id %}
这里的问题是上下文中没有变量object
,因此object.id
只是解析为一个空字符串,给你一个错误。您需要将其替换为song.id
:
{% url 'add-to-fav-songs' song.id %}
接下来,您尝试使用此注释来删除该错误代码:
<!-- <button> <a href="{% url 'add-to-fav-songs' object.id %}"></a> Add To Favourite Songs</button> -->
这里的问题是 Django 不关心 HTML 注释,它会尝试渲染它们并再次给你同样的错误。您可以删除此代码或使用comment
模板标签 [Django docs]使 Django 实际上将其视为注释:
{% comment %}
<button> <a href="{% url 'add-to-fav-songs' object.id %}"></a> Add To Favourite Songs</button>
{% endcomment %}
推荐阅读
- java - 在 Java 17 上运行 Eclipse 时出错
- sql - 选择包含一组值的所有行
- powerbi - 需要在 Power BI 中使用 DAX 根据日期查找新行
- ansible - 如何杀死ansible中的异步进程?
- quarkus-panache - 如何按特定字段过滤 PanacheQuery?
- javascript - Prestashop - 当有产品定制字段时显示警告
- python - 如何使用 Peewee Flask 创建页面分页?
- javascript - 如何在我的网站 loadinf 屏幕中添加 .gif
- java - Spring接口驱动控制器的使用
- python - 如何在python的文件处理中保存迭代输入