在YouTube上Bucky的Django教程之后,找不到带有参数“('',)”的“收藏夹”

时间:2018-06-22 13:28:14

标签: python django django-templates

我一直在/ 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')

1 个答案:

答案 0 :(得分:4)

您要引用的

变量是 one_album

但是您将其称为专辑。

更改

<form action = "{% url 'music:favorite' album.id %}" method="post" >

<form action = "{% url 'music:favorite' one_album.id %}" method="post" >