NoReverseMatch after include Favorite button

Question:

I’m pretty new at Django framework, and following a tutorial. Although when I tried to include a input button for favorites on my detail.html I got this error:

Error during template rendering
In template C:Usersleo8DesktopLucasc2view03webdevetemplatesdetail.html, error at line 8

Reverse for ‘favorites’ with arguments ‘(”,)’ not found. 1 pattern(s) tried:

[‘webdeve/(?P<Dreams_id>[0-9]+)/favorites/$’]

1 <img src="{{ dream.imagem }}">
2 <h2>{{ dream.titulo }} {{ dream.objetivo }}</h2>
3 
4 {% if error_message %}
5     <p><strong>{{ error_message }}</strong></p>
6 {% endif %}
7 
8 <form action="{% url 'webdeve:favorites' Dreams.id %}" method="post">
9     {% csrf_token %}
10        {% for which in dream.which_set.all %}
11            <input type="radio" id="which{{ forloop.counter }}" name="which" value="{{ titulo.id }}"/>
12            <label for="which{{ forloop.counter }}">
13                {{ which.make }}
14                {% if which.favorites %}
15                    <img src="https://cdn2.iconfinder.com/data/icons/aspneticons_v1.0_Nov2006/add_16x16.gif" />
16                {% endif %}
17            </label><br>
18        {% endfor %}

Those are my views:

from .models import Dreams, Which
from django.shortcuts import render, get_object_or_404

app_name = 'webdeve'


def index(request):
    all_dreams = Dreams.objects.all()
    contexto = {'all_dreams': all_dreams}
    return render(request, 'index.html', contexto)


def detail(request, Dreams_id):
    #dream = Dreams.objects.get(pk=Dreams_id)
    dream = get_object_or_404(Dreams, pk=Dreams_id)
    return render(request, 'detail.html', {'dream': dream})


def favorites(request, Dreams_id):
    dream = get_object_or_404(Dreams, pk=Dreams_id)
    try:
        selected_which = dream.which_set.get(pk=request.POST['make'])
    except (KeyError, Which.DoesNotExist):
        return render(request, 'detail.html', {
            'dream': dream,
            'error_message': "no which selected"
        })
    else:
        selected_which.favorites = True
        selected_which.save()
        return render(request, 'detail.html', {'dream': dream})

and myapp.urls

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

app_name = 'webdeve'

# Dreams

urlpatterns = [
    url(r'^$', views.index, name='index'),

# Dreams/detail

    url(r'^(?P<Dreams_id>[0-9]+)/$', views.detail, name='detail'),

# Dreams/detail/favoriteS

    url(r'^(?P<Dreams_id>[0-9]+)/favorites/$', views.favorites, name='favorites'),
]
Asked By: lucasrf27

||

Answers:

You never send Dreams to your form from your view, therefore Dreams.id doesn’t exist. Try dream.id in your template.

Answered By: Carl Brubaker