I'm completely around the axle on this.
---------------------------------------------------------------------
** The log:
[26/May/2009 00:06:43] "GET /polls/1/detail/ HTTP/1.1" 200 333
[26/May/2009 00:06:49] "POST /polls/1/detail/vote/ HTTP/1.1" 404 2314

** The 404:
Using the URLconf defined in mysite.urls, Django tried these URL
patterns, in this order:

   1. ^admin/
   2. ^admin/doc/
   3. ^polls/ ^admin/doc/
   4. ^polls/ ^$
   5. ^polls/ ^(?P<poll_id>\d+)/detail/$
   6. ^polls/ ^(?P<poll_id>\d+)/results/$
   7. ^polls/ ^(?P<poll_id>\d+)/vote/$

The current URL, polls/1/detail/vote/, didn't match any of these.

** The template (detail.html)

<h1>{{ poll.question }}</h1>

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

<form action="vote/" method="post">
{% for choice in poll.choice_set.all %}
    <input type="radio" name="choice" id="choice{{ forloop.counter }}"
value="{{ choice.id }}" />
    <label for="choice{{ forloop.counter }}">{{ choice.choice }}</
label><br />
{% endfor %}
<input type="submit" value="Vote" />
</form>

** The Vote and Detail functions

from django.shortcuts import get_object_or_404, render_to_response
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from mysite.polls.models import Choice, Poll

def detail(request, poll_id):
    try:
        p = Poll.objects.get(pk=poll_id)
    except Poll.DoesNotExist:
        raise Http404
    return render_to_response('polls/detail.html', {'poll': p,})


def vote(request, poll_id):
    p = get_object_or_404(Poll, pk=poll_id)
    try:
        selected_choice = p.choice_set.get(pk=request.POST['choice'])
    except (KeyError, Choice.DoesNotExist):
        # Redisplay the poll voting form.
        return render_to_response('polls/detail.html', {
            'poll': p,
            'error_message': "You didn't select a choice.",
        })
    else:
        selected_choice.votes += 1
        selected_choice.save()
        # Always return an HttpResponseRedirect after successfully
dealing
        # with POST data. This prevents data from being posted twice
if a
        # user hits the Back button.
------------------------------------------------------------------------------------
When the Vote button is clicked, the URL is instantly appended with /
vote and (naturally) the 404 is raised.

This is my first trip with Django and little Python so I'm still
chasing the easy stuff. Sorry for the bother and thanks for taking the
time.

Allan

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to