В настоящее время я работаю над созданием системы «лайков» для веб-сайта в стиле блога в Django. Я просмотрел несколько различных примеров настройки шаблонов HTML и надеялся лучше понять некоторые логики c.
Моей первой мыслью было ie «нравится» кнопку в соответствующем представлении, например:
<a class="btn btn-secondary" href="{% url 'post-like' post.id %}" role="button">Like ({{ post.likes.count }})</a>
Кажется, это работало прилично («лайки» регистрировались и отображались в подсчете), но у меня возникли проблемы с возвращением на нужную страницу после нажатия кнопку «нравится» (т.е. когда я нажимал кнопку «нравится», меня переходили на другую страницу, а не оставалось на домашней странице).
Затем я нашел другой пример в Интернете, который создал функцию get_like_url()
под более широкий Post
Model
вот так:
def get_like_url(self):
return reverse("post-like", kwargs={"pk":self.id})
И затем назвал его в шаблоне вот так:
<a class="btn btn-secondary" href="{{ instance.get_like_url }}" role="button">Like ({{ post.likes.count }})</a>
Я думал, что это в основном то же самое, но когда я использовал этот метод, он возвращал меня на домашнюю страницу моего сайта, но не регистрировал подобное (т.е. не казалось, что кнопка на самом деле что-то делала).
Может ли кто-нибудь помочь мне понять, что такое goi ng здесь?
Для справки, вот мой View
для системы «нравится»:
class LikeView(View):
model = Post
context_object_name = 'posts'
def get(self, request, pk=None):
user = self.request.user
post = Post.objects.get(pk=pk)
updated = False
liked = False
if user.is_authenticated:
if user in post.likes.all():
liked = False
post.likes.remove(user)
else:
liked = True
post.likes.add(user)
updated = True
data = {
"updated": updated,
"liked": liked,
}
return HttpResponse(data)
И мой URL pattern
:
path('post/like/<int:pk>', LikeView.as_view(), name='post-like')
Заранее спасибо за помощь!