我一直在/ music / 2 /错误中获取NoReverseMatch,它指向我从base.html继承的父模板,但是我找不到任何错误。我知道有人要求您搜索错误可能很烦人,但也许有人可以轻松地看到我看不到的内容
{% extends "music/base.html" %}
{% block content %}
<p> Album : {{one_album}} </p>
<p> Song list : </p>
{% if somethings_wrong %}
<p> {{ somethings_wrong }} </p>
{% endif %}
<form action = "{% url 'music:favorite' album.id %}" method="post" >
{% csrf_token %}
{% for song in album_entries %}
<input type="radio" id="song{{forloop.counter}}" name="song" value="{{ song.id }}">
<label for="song{{ forloop.counter }}">
{{ song.song_title }}
{% if song.is_favorite %} #afterwards, set this explicitly to true, for learning purposes
<img src="https://i.imgur.com/olM72b8.png"/> #check if this slash is necessary later
{% endif %}
</label><br>
{% endfor %}
<input type="submit" value="Favorite">
</form>
{% endblock content %}
这是base.html
<p>
<a href="{% url 'music:index' %}"> Link to the homepage </a>
</p>
{% block content %}
{% endblock content %}
这是Views.py:
from django.shortcuts import render
from django.http import HttpResponse
from .models import Album, Song
def index(request):
albums = Album.objects.all()
context = {'albums': albums}
return render(request, 'music/index.html', context)
def detail(request, album_id):
# show album and every entry in that album.
one_album = Album.objects.get(id=album_id)
album_entries = one_album.song_set.all()
context = {'one_album' : one_album, 'album_entries' : album_entries}
return render(request, "music/album.html", context)
# Create your views here.
def favorite(request, album_id):
one_album = Album.objects.get(id=album_id)
try:
context = {'one_album' : one_album}
selected_song = one_album.song_set.get(id=request.POST["song"])
except(KeyError, Song.DoesNotExist):
somethings_wrong = "Something's not right with your choice"
context = {'one_album' : one_album, 'somethings_wrong' : somethings_wrong}
return render(request, "music/album.html", context)
else:
selected_song.is_favorite = True
selected_song.save()
return render(request, "music/album.html", context)
我认为错误在这里,urls.py和models.py非常简单。我已经将is_favorite booleanfield添加到Song类中,默认情况下为False,而urls.py非常简单
path('<int:album_id>/favorite', views.favorite, name='favorite')
答案 0 :(得分:4)
变量是 one_album
但是您将其称为专辑。
更改
<form action = "{% url 'music:favorite' album.id %}" method="post" >
到
<form action = "{% url 'music:favorite' one_album.id %}" method="post" >