我正在构建一个博客应用程序,当发布 comments 和回复 comments 时,页面重定向到帖子页面的顶部,我希望它重定向到发布的 comments \回复,或者滚动到它,如果你愿意的话.

例如,在发布时,我希望它达到http://127.0.0.1:8000/post/first#comment-12 要实现类似于以下内容的内容:

return HttpResponseRedirect(reverse(f'post_page#comment-{str(comment.id)}', kwargs={ 'slug': slug }))

Views.py

if request.POST:
    comment_form = CommentForm(request.POST)
    if comment_form.is_valid:
        if request.POST.get('parent'):
            parent_id = request.POST.get('parent')
            parent = Comments.objects.get(id=parent_id)
            if parent:
                comment_reply = comment_form.save(commit=False)
                comment_reply.parent = parent
                comment_reply.post = post
                comment_reply.save()
        else:
            comment = comment_form.save(commit=False)
            post_id = request.POST.get('post_id')
            post = Post.objects.get(id=post_id)
            comment.post = post
            comment.save()
        return HttpResponseRedirect(reverse('post_page', kwargs={ 'slug': slug }))

Urls.py

urlpatterns = [
    path('', views.index, name='index'),
    path('post/<slug:slug>', views.post_page, name='post_page')
]

推荐答案

您可以在路径的末尾手动添加片段,如下所示:

return HttpResponseRedirect(f"{reverse('post_page', kwargs={ 'slug': slug })}#comment-{comment.id}")

我认为redirect(…) [Django-doc]reverse(…) functions [Django-doc]本可以受益于一个可选的_anchor参数,该参数将附加锚(并对其进行URL编码).

Django相关问答推荐

为什么当对字段使用自定义序列化器时,Django Rest框架中Inbox字段会消失?

查尔而不是瓦尔查尔加盟Django 球场

Django:添加第二个';详细';用于检索额外信息的视图

Django: 无法将我的 comments 关联到特定产品

`.objects` 属性在哪里添加到 Django 的 models.Model 类中的实例命名空间?

Django 关系嵌套related_name

Django - 将 HTML 输出转换为变量

EmailBackend 用于在 Django 中通过多个 SMTP 发送邮箱

使用 Django 和 South 重命名应用程序

Django:使用 Django ORM 实现 JOIN?

模板过滤器修剪任何前导leading或尾随trailing空格

Django Admin - 覆盖自定义表单字段的小部件

Django REST Framework 和 FileField 绝对 url

如何创建一个在复选框右侧显示复选框标签的 Django 表单?

Celery 和 Django 简单示例

Django:如何编写查询以使用多列进行排序,通过模板显示

在 Django 中使用 Cython,是否有意义?

获取 django 应用的绝对路径

Django将HttpResponseRedirect返回到带有参数的url

XlsxWriter 对象另存为 http 响应以在 Django 中创建下载