Das Problem ist aufgrund der Ajax-Implementierung in meiner Django Twitter-Klon-App, die gleiche Anzahl für jeden Beitrag zeigt das gleiche nach dem Klicken auf die Schaltfläche ähnlich, sondern nach der Seite Aktualisieren Sie das ist in Ordnung. Ich bin nah dran, das Problem zu lösen, stecke aber irgendwie fest.Ajax wie Count zeigt das gleiche für jeden Beitrag in Django
Ansicht:
def add_like(request):
if request.method == 'GET':
ans_id = request.GET['id']
user = request.user.profile
liked_tweet = get_object_or_404(Tweet, pk=ans_id)
if ans_id:
# creating instance by sending the Like table fields
instance, created = Like.objects.get_or_create(liker=user, liked_tweet=liked_tweet)
ans = Tweet.objects.get(id=(int(ans_id)))
if ans:
likes = ans.likes + 1
ans.likes = likes
ans.save()
# returns the likes field of a tweet post
return HttpResponse(likes)
der Httpresponse ist die Gleichen das Senden und das schafft das Problem, denke ich.
die Vorlage:
{% for tw in tweets %}
<div class="blog-post">
<p>
{{ tw.content|safe }}<br><hr>
<small class="small">
লিখসে -
<!-- in the "href" we can pass data like "pk", accessing by the structure the current object is based on-->
<a href="{% url 'profile' pk=tw.tweeter.user.pk %}">{{ tw.tweeter.user.username|capfirst }}</a>
</small>
</p>
{% if user.is_authenticated %}
<button class="btn btn-default likes-button" type="button"
data-ansid="{{ tw.pk }}">Like</button>
<i> Total Likes: </i><em class="like_count">{{ tw.likes }}</em>
{% endif %}
</div>
der Ajax-Skript:
$(".likes-button").click(function(e) {
if ($(this).html() == "Like") {
$(this).html('Unlike');
//alert("js working");
// error was there for "data" insted of "attr"
var ansid = $(this).attr("data-ansid");
$.ajax({
url: '{% url "add_like" %}',
type: 'get',
data: {id: ansid}
}).done(function (data) {
alert("success");
$('.like_count').html(data);
//$('#likes').hide();
}).fail(function (err) {
alert(err);
});
}
Vielen Dank im Voraus.
Ich glaube, das Problem liegt daran, dass Sie die HTML eines sehr breiten '$ ('. Like_count')' Elements setzen, müssen Sie es ein strengeres Element geben, um es anzuwenden, (nicht Zeit atm zu bekommen eine volle Antwort geben) – Sayse
Danke @Sayse, aber ich habe das nicht sehr gut bekommen. Vielleicht werde ich einige Zeit warten, um eine richtige Lösung zu finden, wenn Sie Zeit bekommen. Danke für die Antwort und ich überprüfe das. –