【问题标题】:After clicking to like button redirecting to top of the page?单击“喜欢”按钮后重定向到页面顶部?
【发布时间】:2021-05-30 12:36:31
【问题描述】:

我喜欢和不喜欢这篇文章。喜欢和不喜欢工作完美,但唯一的问题是当我单击时我停留在同一页面上,但我重定向到页面顶部。我想要的不仅是页面,还要保持相同的位置,我的每篇文章都有图像,所以要阅读整篇文章,我们必须向下滚动,并且喜欢按钮是文章的结尾。以下是一些细节。

post_detail 页面(喜欢按钮)

<form action="{% url 'like_post' single_post.category.slug single_post.slug %}" method="POST">
                    {% csrf_token %}
                        <button type="submit" name="like_btn" value={{single_post.id}} class="ui red button like_btn" >
                            <i class="heart icon"></i> Like ({{single_post.total_likes}})
                        </button>
                    </form>

urls.py

​​>
path('<slug:category_slug>/<slug:post_slug>', views.post_detail , name="post_detail"),
path('like/<slug:category_slug>/<slug:post_slug>', views.like_post, name="like_post")

后模型

class Post(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=255)
    slug = models.SlugField(max_length=100)
    image = models.ImageField(upload_to = 'photos/post_image/%Y/%m/%d/', default="../static/images/pp2.jpg")
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    likes = models.ManyToManyField(User, related_name='post_likes')
    description = FroalaField()
    views = models.IntegerField(default=0)
    comments = GenericRelation(Comment)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

def save(self, *args, **kwargs):
        self.slug = slugify(self.title)
        return super(Post, self).save(*args, **kwargs)
    
    def total_likes(self):
        return self.likes.count()

    def get_url(self):
        return reverse("post_detail", args=[self.category.slug, self.slug])  

    def __str__(self):
        return self.title

views.py

​​>
def like_post(request,category_slug, post_slug):
    post = get_object_or_404(Post, id=request.POST.get('like_btn'))
    liked = False
    if post.likes.filter(id = request.user.id).exists():
        post.likes.remove(request.user)
        liked = False
    else:
        post.likes.add(request.user)
        liked = True
    return HttpResponseRedirect(reverse('post_detail', args=[category_slug, post_slug]))

【问题讨论】:

  • 我相信你应该通过ajax方法发送POST请求而不提交表单

标签: django django-models django-views django-templates


【解决方案1】:

id="redirect_here" 添加到您的表单标签中,并在发布后设置重定向到您要重定向的页面(在本例中为同一页面)。在重定向结束时添加#redirect_here

您可以在这里阅读: Scroll to a specific Element Using html

【讨论】:

  • 是的,我也首先想到了这一点,但我不知道如何在 views.py 文件中实现它。我无法更改重定向 URL。请告诉我如何在我的views.py中实现它
  • 也许这对你有帮助:) stackoverflow.com/questions/53788600/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多