Обновляйте переменную каждые 5 секунд, используя jquery - PullRequest
0 голосов
/ 13 января 2020

Я использую django для создания веб-страницы, и я делаю это впервые. Я пытаюсь получить значение переменной из файла .py с интервалом в 5 секунд. Ниже приведен код HTML:

<!DOCTYPE html>
    <html>
    <head>
        <title>Like Post App</title>

    <script
      src="https://code.jquery.com/jquery-3.4.1.js"
      integrity="sha256-WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU="
      crossorigin="anonymous"></script>

      <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
</head>
<body>
    <div class = "display-3 color-red"><center>DataFlair AJAX Tutorial<br>Post APP</center></div>
    {% for post in posts %}
        <div class = 'container jumbotron'>
        <h3 class="display-5">{{ forloop.counter }}. {{ post.post_heading }}</h3>
<p class="lead">{{ post.post_text }} </p>
        <p>
        <div type="text/css" class = "container">Author : {{ post.post_author }}</div>
        <a class="likebutton btn btn-primary btn-lg" id="like{{ post.id }}" data-catid="{{ post.id }}">Like({{ post.like_ref.counter }})</a> </p> <p id="message{{post.id}}">
</p>
</div>
{% endfor %}

<script type="text/javascript">

              setInterval(function() {
                    getvalue(); // Do something every 5 seconds
              }, 5000);

getvalue();
              function getvalue(){

                      var id;
                      id = $(this).attr("data-catid");
                      $.ajax(
                        {
                          type:"GET",
                          url: "like",
                          data:{
                             post_id: id
                                },
                      success: function( data )
                      {
                          $( '#like'+ id ).text("Like(" + data +")");
                          var i=parseInt(data);
                          console.log("Value= "+i);
                      }
                    }
                  )
                }


</script>
</body>
</html>

Ниже приведен код views.py:

import json
from django.shortcuts import render
from .models import Post, Like
from django.http import HttpResponse
# Create your views here.
#DataFlair #AJAX_tutorial
def index(request):
    posts = Post.objects.all()
    return render(request, 'post/index.html', { 'posts': posts })
def like(request):
    if request.method == 'GET':
        post_id = request.GET['post_id']
        likedpost = Post.objects.get(id = post_id )
        m = Like.objects.filter( post=likedpost ).first()
        m.counter +=1
        m.save()
        value1= int(m.counter)
        #data1= {'cmd': 'success', 'ctr': str(m.counter) }
        return HttpResponse(value1)
        #return HttpResponse(json.dumps(data1))


    else:
        return HttpResponse("unsuccesful")

Я получаю следующие ошибки: 1) GET http://localhost : 8000 / ajax / like / 500 (внутренняя ошибка сервера) 2) GET http://localhost: 8000 / favicon.ico 404 (не найдено)

Пожалуйста, помогите.

1 Ответ

2 голосов
/ 14 января 2020

Я считаю:

id = $(this).attr("data-catid");

не указывает на кнопку ... возможно, вам следует попробовать:

id = $(".likebutton").attr("data-catid");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...