Django - опрос ajax с результатами на той же странице - PullRequest
0 голосов
/ 10 января 2019

Я учу Джанго, и мне нужна помощь с моим приложением. На странице у меня есть опрос: я хочу, чтобы после того, как пользователь проголосовал, форма опроса исчезает и появляется div #ajaxresults с обновленными голосами для каждого варианта. Я использую вызов ajax, но не могу вернуть обновленные голоса.

Если я позвоню напрямую «/ polls / 4 / results», я увижу правильный список, но не могу включить этот блок на той же странице формы. Чего мне не хватает?

urls.py

app_name = 'polls'
urlpatterns = [
    path('', views.index, name='list'),
    path('<int:question_id>/', views.detail, name='detail'),
    path('<int:question_id>/results/', views.results, name='results'),
    path('<int:question_id>/vote/', views.vote, name='vote'),
]

view.py

def results(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    #return render(request, 'polls/results.html', {'question': question})
    return redirect(question.get_absolute_url())

@require_POST
def vote(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    selected_choice = question.choice_set.get(pk=request.POST['selectionId'])
    selected_choice.votes += 1
    selected_choice.save()
    return redirect('polls:results', question_id = question_id)

подробный шаблон (расширяет base.html)

<form id="quiz-module" action="#">
 <input type="hidden" id="pollId" name="pollId" value="{{question.id}}">
{% csrf_token %}
    <fieldset>
        <h2>{{ question.question_text }}</h2>
        <ul>
        {% for choice in question.choice_set.all %}
            <li><input type="radio" name="opt" value="{{ choice.id }}" {% if forloop.first %}required {%endif%}/>{{ choice.choice_text }}</li>
        {% endfor %}
        </ul>
    </fieldset>
</form>
<section id="quiz-results">
    <h3>Your vote</h3>
    <p id="ajaxresults"></p>
    <h3>All votes</h3>
    <dl>
        {%block updated_results %}{% endblock %}
    </dl>
</section>

шаблон голосования пуст

результаты шаблона (ничего не расширяет)

{%block updated_results %}
    {% for choice in question.choice_set.all %}
        <dt>{{ choice.choice_text }}:  </dt><dd id="choiceId-{{ choice.id }}">{{ choice.votes }}</dd>
    {% endfor %}
{% endblock %}

JS

var args = { 
                type:"POST", 
                url:"/polls/"+pollId+"/vote/", 
                data:data, 
                success: function( data ) {
                    //print your vote
                    results.children('#ajaxresults').html(selectionText); 
                    form.hide('fast');
                    results.show('fast');
                },
                error: function(xhr, status, error) {
                  alert(error+'<br/>'+"Sorry. Can't submit your vote. Please, reload the page and try again")
                },
            };
            $.ajax(args);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...