django.urls.exceptions.NoReverseMatch: обратное для «любимого» не найдено - PullRequest
0 голосов
/ 24 июня 2018

Django версия 2.0

views.py

from django.views import generic
from .models import Album


class IndexView(generic.ListView):
    template_name = 'music/index.html'
    context_object_name = 'all_albums'

    def get_queryset(self):
        return Album.objects.all()

class DetailView(generic.DetailView):
    model = Album
    template_name = 'music/details.html'

details.html

{% extends 'music/base.html' %}

{% block body %}

    <!-- {{album}} -->

    <img src="{{album.album_logo}}">

    <h1>{{album.album_title}}</h1>
    <h3>{{album.artist}}</h3>



    {% if error_message %}
        <p><strong>{{ error_message }}</strong></p>
    {% endif %}    

    <form action="{% url 'music:favorite' album.id %}" method="post">
        {% csrf_token %}
        {% for song in album.song_set.all %}
            <input type="radio" id="song{{ forloop.counter }}" name="song" value="{{ song.id }}">
            <label for="song{{ forloop.counter }}">
                {{ song.song_title }}
                {% if song.is_favorite %}
                    <img src="http://i.imgur.com/b9b13Rd.png" />
                {% endif %}
            </label><br> 
        {% endfor %}
        <input type="submit"  value="Favorite">

    </form>
{% endblock %}

index.html

{% extends 'music/base.html' %}

{% block body %}
    {% if all_albums %}
        <h3>Here are all my Albums:</h3>
        <ul>


            {% for album in all_albums %}


            <li><a href="{% url 'music:details' album.id %}">{{ album.album_title }}</a></li>

            {% endfor %}
        </ul>
    {% else %}
        <h3>You don't have any albums</h3>
    {% endif %}         
{% endblock %}

base.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Viberr</title>
    {% load staticfiles %} 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"  />
    <link href='https://fonts.googleapis.com/css?family=Satisfy' rel='stylesheet' type="text/css">
    <link rel="stylesheet" type="text/css" href="{% static 'music/style.css' %}" />
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

</head>
<body>
    <nav class="navbar navbar-inverse">
                <div class="container-fluid">

                    <!-- Header -->
                    <div class="navbar-header">
                        <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#topNavBar">
                            <span class="icon-bar"></span>
                            <span class="icon-bar"></span>
                            <span class="icon-bar"></span>
                        </button>
                        <a class="navbar-brand" href="{% url 'music:index' %}">University of Calicut</a>
                    </div>

                    <!-- Items -->
                    <div class="collaps navbar-collaps" id="topNavBar">
                        <ul class="nav navbar-nav">
                            <li class="active">
                                <a href="{% url 'music:index' %}">
                                    <span class="glyphicon glyphicon-cd" aria-hidden="true"></span>&nbsp;
                                    Albums
                                </a>
                            </li>
                            <li class="">
                                    <a href="{% url 'music:index' %}">
                                        <span class="glyphicon glyphicon-music" aria-hidden="true"></span>&nbsp;
                                        Songs
                                    </a>
                            </li>
                        </ul>

                        <form class="navbar-form navbar-left" role="search" method="GET" action="#">
                            <div>
                                <input type="text" class="form-control" name="q" value="">
                                <button type="submit" class="btn btn-default">Search</button>
                            </div>

                        </form>

                        <ul class="nav navbar-nav navbar-right">
                            <li class="">
                                <a href="#">
                                    <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>&nbsp;
                                    Add Album
                                </a>
                            </li>

                            <li class="">
                                    <a href="#">
                                        <span class="glyphicon glyphicon-off" aria-hidden="true"></span>&nbsp;
                                        Logout
                                    </a>
                            </li>

                        </ul>


                    </div>


                </div>
    </nav>
{% block body %}

{% endblock %}

</body>
</html>

urls.py (музыка)

from django.conf.urls import url
from .import views
from django.urls import path


app_name = 'music'

urlpatterns = [


    url(r'^$',views.IndexView.as_view(), name='index'),

    url(r'^(?P<pk>[0-9]+)/$',views.DetailView.as_view(), name='details'),

]

models.py

from django.db import models



class Album(models.Model):
    artist = models.CharField(max_length=250)
    album_title=models.CharField(max_length=500)
    genre=models.CharField(max_length=100)
    album_logo=models.CharField(max_length=1000)


    def __str__(self):
        return self.album_title + ' - ' + self.artist

class Song(models.Model):
    album = models.ForeignKey(Album, on_delete=models.CASCADE)
    file_type = models.CharField(max_length=10)
    song_title = models.CharField(max_length=250) 
    is_favorite = models.BooleanField(default=False)


    def __str__(self):
        return self.song_title
  1. Я прикрепил изображения моей домашней страницы и связанной страницы, пожалуйста, помогите мне с вопросом

В приведенном выше коде вторая страница выдает ошибку

django.urls.exceptions.NoReverseMatch: обратное для «любимого» не найдено. 'favourite' - недопустимая функция просмотра или имя шаблона **

Пожалуйста, кто-нибудь, помогите мне, где я не прав! Заранее спасибо!

1 Ответ

0 голосов
/ 24 июня 2018

Я не вижу здесь ни одного URL с именем фаворита, о чем также говорит ошибка:

app_name = 'music'

urlpatterns = [


    url(r'^$',views.IndexView.as_view(), name='index'),

    url(r'^(?P<pk>[0-9]+)/$',views.DetailView.as_view(), name='details'),

]

вы, вероятно, скопировали, вставили details.html, или вы просто забыли указать«любимый» URL-адрес в приложении «музыка»

РЕДАКТИРОВАТЬ: как вы уже выяснили, что вы не можете решить проблему на своем onw: измените details.html следующим образом:

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

замените его на

<form action="#" method="post">

, после чего ваш сайт должен хотя бы загрузиться.

EDIT2:

После просмотра видео на YouTube, которое вы связали в своем комментарии: всеответы есть в видео и его комментариях!Вы не обновили details.html.Внимательно следите за минутой 1: 50 .Кстати, мое решение о замене действия формы также будет работать, но результат будет немного отличаться от того, что вы могли бы ожидать ... Надеюсь, это поможет вам начать;)

...