在template-django中一次显示一个表单字段

时间:2014-06-12 07:44:46

标签: python django

我有一组问题及其存储在db.I中的答案有一个表单来获取每个问题的答案。我需要在模板中一次只显示一个问题,并根据存储在db中的原始答案验证该答案。

现在能够显示一个值。但我需要的是在页面中显示问题并验证答案是否正确,继续显示来自db的下一个问题,依此类推。我如何实现这一目标?

form.py

from django import forms
class details_form(forms.Form):
     answer = forms.CharField(widget=forms.TextInput())

views.py

def display_question(request):
    context = RequestContext(request)
    if request.method == 'GET':
        print "GET"
        form_class = details_form()
        que_data = details.objects.get(que_id=1)
    else:
        ##POST request
    return render_to_response('sample/display_question.html',{'form':form_class,'que_data':que_data},context)

模板:

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

    {% block title %} Question {% endblock %}
    {% block body_block %}   
     <p><strong>Your question : </strong></p>
            "{{ que_data.que }}"
            <p><strong>Type your answer here :<strong></p>
            <form id='details_form' method = 'post' action='/next'>
                {% csrf_token %}
                {% for hidden in form.hidden_fields %}
                    {{ hidden }}
                {% endfor %}

                {% for field in form.visible_fields %}
                    {{ field.errors }}
                    {{ field.help_text }}
                    {{ field }}
                {% endfor %}
                <br></br>
                <input type ="submit" name="submit" value="Submit"/>
            </form>
    {% endblock %}

更新

views.py

def display_question(request,question_id):
    context = RequestContext(request)
    form_class = details_form()
    try:
        quesno_id = {'id':question_id}
        que_data = details.objects.get(que_id=question_id)
    except details.DoesNotExist:
        pass    

    if request.method == 'POST':
        form = details_form(request.POST)
        if form.is_valid():    
            user_answer = form.cleaned_data['answer']
            if que_data.original_answer == user_answer:
                return HttpResponseRedirect("question/%s/" %question_id+1)
        else:
            print form.errors
    else:
        pass
    return render_to_response('sample/display_question.html',{'form':form_class,'que_data':que_data,'quesno_id':quesno_id},context)

模板

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

{% block title %} Question {% endblock %}
{% block body_block %}   
       <p><strong>Your question {{ quesno_id.id}} : </strong></p>
        "{{ que_data.que }}"
        <p><strong>Type your answer here :<strong></p>
        <form id='details_form' method = 'post' action="/">
            {% csrf_token %}
            {% for hidden in form.hidden_fields %}
                {{ hidden }}
            {% endfor %}

            {% for field in form.visible_fields %}
                {{ field.errors }}
                {{ field.help_text }}
                {{ field }}
            {% endfor %}
            <br></br>
            <input type ="submit" name="submit" value="Submit"/>
        </form>
{% endblock %}

urls.py

urlpatterns = patterns('',
        url(r'^$', views.index, name='index'),
        url(r'^question/(?P<question_id>\w+)/$',views.display_question,name='display_question'),
)

models.py

from django.db import models

class Songdata(models.Model):
    que_id = models.AutoField(primary_key=True)
    que = models.CharField(max_length=256)
    original_answer = models.TextField()

    def __unicode__(self):
        return self.song_name

form.py

from django import forms


class details_form(forms.Form):
     user_answer = forms.CharField(widget=forms.TextInput())

1 个答案:

答案 0 :(得分:0)

您需要使用绝对网址路径,例如HttpResponseRedirect("/question/%s/" % (question_id+1))(请注意前导斜杠)