【问题标题】:Django | Redirect View after "liking" without scrolling姜戈 | “喜欢”后重定向视图而不滚动
【发布时间】:2020-10-21 03:50:55
【问题描述】:

我正在制作一个简单的博客应用程序。我已经添加了在您的提要上“喜欢”帖子的功能。但是,我能弄清楚关闭视图的唯一方法是返回某种形式的重定向。问题是,如果您“喜欢”的帖子位于页面的一半,我不希望它再次将缩放重置到页面顶部。有没有办法简单地重定向到同一页面而不影响缩放?

这是我的帖子模型:

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name="author")
    likes = models.ManyToManyField(User, related_name="likes", blank=True)

    def like(self, post):
        self.likes.add(post)

    def unlike(self, post):
        self.likes.remove(post)

我在视图中有以下设置:

@login_required
def like(request, pk):
    post = Post.objects.get(id=pk)
    Post.like(post, request.user)
    return HttpResponseRedirect(reverse('Home'))


@login_required
def unlike(request, pk):
    post = Post.objects.get(id=pk)
    Post.unlike(post, request.user)
    return HttpResponseRedirect(reverse('Home'))

以下是我从 URL 调用视图的方式:

path('like/<int:pk>', views.like, name='Like'),
path('unlike/<int:pk>', views.unlike, name='Unlike'),

我正在使用模板上的表单来触发 URL:

{% if user in post.likes.all %}
<form action="{% url 'Unlike' post.pk %}" method="POST">
    {% csrf_token %}
    <button type="submit" value="{{ post.id }}" class="unlike">UNLIKE</button>
</form>
{% else %}
<form action="{% url 'Like' post.pk %}" method="POST">
    {% csrf_token %}
    <button type="submit" value="{{ post.id }}" class="like">LIKE</button>
</form>
{% endif %}

有什么我可以改变的吗?我假设我需要在视图函数的“返回”下更改或添加一些内容?

【问题讨论】:

    标签: python python-3.x django django-views


    【解决方案1】:

    一种方法是为每个使用帖子 ID 的点赞按钮添加一个锚标记,然后在从您的视图重定向到帖子时,在帖子 URL 的末尾包含 #pk 以指向该 ID 锚在页面下方。

    【讨论】:

    • 这成功了!如果可以的话,我仍然想找到一种无需重定向的方法,但感谢您帮助我解决这个问题!
    猜你喜欢
    • 2020-09-11
    • 1970-01-01
    • 2012-10-25
    • 2021-03-05
    • 2017-09-20
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    • 2011-02-27
    相关资源
    最近更新 更多