【发布时间】:2020-05-12 03:40:26
【问题描述】:
我尝试了另一种方法来为帖子创建一个赞按钮,我已经到了按钮将我引导至错误This page isn’t working的阶段
不确定问题出在哪里。我正在关注一个教程,但唯一的区别是教程为帖子创建了一个函数,在视图中具有上下文,而我为帖子创建了一个类。我不知道这是否是一些偏差和出现错误的原因
这是模型:
class Post(models.Model):
designer = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=100)
---- Others unrelated models------
likes = models.ManyToManyField(User, blank=True, related_name='liked')
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse("score:post-detail", kwargs={'pk': self.pk})
@property
def num_likes(self):
return self.liked.all().count()
LIKE_CHOICES = (
('Like', 'Like'),
('Unlike', 'Unlike'),
)
class Like(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
value = models.CharField(choices=LIKE_CHOICES,
default='Like', max_length=10)
def __str__(self):
return str(self.post)
这里是观点
class PostDetailView(DetailView):
model = Post
template_name = "post_detail.html"
class PostListView(ListView):
model = Post
template_name = "score.html"
ordering = ['-date_posted']
context_object_name = 'posts'
queryset = Post.objects.filter(admin_approved=True)
paginate_by = 5
def like_post(request):
user = request.user
if request.method == 'Post':
post_id = request.POST.get('post_id')
post_obj = Post.objects.get(id=post_id)
if user in post_obj.liked.all():
post.obj.liked.remove(user)
else:
post_obj.liked.add(user)
like, created = Like.objects.get_or_create(user=user, post_id=post_id)
if not created:
if like.value == 'Like':
like.value = 'Unlike'
else:
like.value = 'Like'
like.save()
return redirect('score:like_post')
这是完整的模板
{% extends "base.html"%}
{% block content %}
{% for post in posts %}
<div style="padding-top:200 px"><strong>{{post.title}}</strong></div>
<form action="{% url 'score:like_post'%}" method='POST' class="ui form">
{% csrf_token %}
<input type='hidden' name='post_id' value="{{post.id}}">
{% if user not in post.liked.all %}
<button class= "ui button positive" type='submit'> Like </button>
{% else %}
<button class= "ui button negative" type='submit'> Unlike </button>
{% endif %}
</form>
<strong>{{post.liked.all.count}} Likes </strong>
{% endfor %}
{% endblock content %}
这是网址
path('', PostListView.as_view(), name='score'),
path('like/', like_post, name='like_post'),
这是基地
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<title>
{% block extra_head %}
{% endblock %}
</head>
<body>
<!--Main layout-->
{% block content %}
{% endblock %}
<!--Main layout-->
<!--Footer-->
{% include "footer.html" %}
<!--/.Footer-->
<!-- SCRIPTS -->
{% include "scripts.html" %}
<!-- SCRIPTS -->
{% block extra_scripts %}
{% endblock extra_scripts %}
</body>
</html>
【问题讨论】:
-
您是否将您的
views导入到urls.py中?它通常写成views.like_post。你能更新你的base.html吗? -
@AzyCrw4282 是的,我在 url
from .views import (PostCreateView, PostDeleteView, PostDetailView, PostListView, PostUpdateView, UserPostListView, like_post)中导入了它,用什么更新基础? -
将base.html的代码添加到帖子中
-
@AzyCrw4282 完成了,但这个问题与基础有什么关系?
-
@PruthviBarot 当我缩进它并添加到类范围时它会断开服务器
ImportError: cannot import name 'like_post' from 'score.views'