2017-10-17 2 views
0

Comment obtenir des données de votes de la base de données sans recharger la page?comment supprimer recharger la page?

mon models.py

from django.db import models 
from django.contrib.auth.models import User 
from django.db.models.signals import post_save 


class Post(models.Model): 
    post = models.CharField(max_length=500) 
    user = models.ForeignKey(User) 
    created = models.DateTimeField(auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True) 
    post_img = models.ImageField(upload_to='posts_img/') 
    votes = models.IntegerField(default=0) 

mon views.py

def upvote(request, post_id): 
    vote = Post.objects.get(pk=post_id) 
    vote.votes += 1 
    vote.save() 
    return redirect('home:home') 

mon home.html

   {% if post.post_img %} 
        <img class="post-img" src="{{ post.post_img.url }}"> 
        <a href="upvote/{{ post.id }}"> vote </a>{{ post.votes }} 
       {% endif %} 
       <p><i>Posted on <b class="date">{{ post.created }}</b></i</p> 

mon urls.py

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

urlpatterns = [ 

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

] 

Si je clique sur le lien de vote dans la page d'accueil, la page sera rechargée et obtiendra le résultat des votes,

Comment puis-je supprimer le rechargement de la page?

mon anglais n'est pas bon mais j'ai besoin de votre aide s'il vous plaît !.

Répondre

0

Vous avez balisé cette question AJAX mais je ne vois pas votre code? Basé sur ce que vous demandez, je pense que this previously asked question devrait être en mesure de vous aider à résoudre ce problème. En particulier, le code HTML en utilisant des modèles de django et les balises et la section js

HTML

<table id="_appendHere" class="table table-striped table-condensed"> 
     <tr> 
     <th>Reg.nr.</th> 
     <th>M&auml;rke</th> 
     <th>Modell</th> 
     </tr> 
     {% for i in order %} 
     {% if i.order_booked %} 
     <tr class="success"> 
     {% else %} 
     <tr>      
     {% endif %} 

     <td>{{ i.regnr|upper }}</td> 
     <td>{{ i.brand|capfirst }}</td> 
     <td>{{ i.brand_model|capfirst }}</td> 
     </tr> 
     {% endfor %} 
    </table> 

JS

<script> 
    var append_increment = 0; 
    setInterval(function() { 
     $.ajax({ 
      type: "GET", 
      url: {% url 'get_more_tables' %}, // URL to your view that serves new info 
      data: {'append_increment': append_increment} 
     }) 
     .done(function(response) { 
      $('#_appendHere').append(response); 
      append_increment += 10; 
     }); 
    }, 10000) 
</script> 
+0

Si vous rencontrez un problème en utilisant [cette question précédemment posée] (https://stackoverflow.com/questions/34774138/reload-table-data-in-django-without-refreshing-the-page), veuillez mettre à jour votre question et je serais ravi d'y jeter un coup d'œil. – noes1s

+0

Et maintenant! –

0

ce que je comprends de votre poste, est que vous devez publier des données par upvote puis afficher ou recharger les résultats de vote actuels à partir de la base de données sans rediriger ou recharger la page à nouveau. Si j'ai bien compris, faites ce qui suit, sinon laissez un commentaire ou mettez à jour votre question.

Dans home.html

... 
... 
<a href="#" class="upvote" data-action="/upvote/{{ post.id }}"> vote </a> 
<span class="votes"> 
{{ post.votes }} 
</span> 
... 
... 
<script> 
$(".upvote").click(function(e){ 
    e.preventDefault(); 
    var $this = $(this); 
    var url = $(this).data("action"); 
    $.post(url, function(response){ 
    if(response && response.success==true) 
     $this.next(".votes").text(response.votes); 
    }); 
}); 
</script> 

En views.py, ne réorientent pas la maison, retourner à la place votre réponse dans JSON

from django.utils import simplejson 
#use the following instead as you use Django 1.11 
from django.core.serializers import serialize 

def upvote(request, post_id): 
    ... 
    ... 
    #get votes from database and assign to variable 
    vote = Post.objects.get(pk=post_id) 
    votes_from_database = vote.votes 
    response_data_to_dump = { 
     'success': true, 
     'votes': votes_from_database, 
    } 

    data = simplejson.dumps(response_data_to_dump) 
    # use the following instead for Django 1.11 
    data = serialize('json', response_data_to_dump) 
    return HttpResponse(data, content_type='application/json') 
    #use the following fro Django 1.6 
    #return HttpResponse(data, mimetype='application/json') 
+0

Oui, vous comprenez ma question, mais qu'est-ce que vous entendez par "#get votes de la base de données et assigner à la variable"? Je ne suis pas bon pour l'anglais! –

+0

Frère Je suis usign django v1.11 et v3.5 python, je reçois une erreur de django.utils importer simplejson ImportError: ne peut pas importer le nom "simplejson" –

+0

utilisation serialize au lieu => de django.core.serializers importer serialize alors appelez serialize ('json', yourObject) – msoliman