Django:在评论发布后重定向到当前文章

时间:2010-01-23 13:03:22

标签: django

我正在尝试在我的项目中使用评论应用程序。

我尝试使用代码({%render_comment_form for event%}),如下文档中所示: Django comments

问题是如何在提交后将表单重定向到同一页面。


另一个重要问题是: 目前,如果我们在for中发现任何错误,那么我们将被重定向到预览模板。 是否可以避免此行为并在同一表单上显示错误(在同一页面上)?

5 个答案:

答案 0 :(得分:5)

我会告诉你我是如何在我的博客中解决它的,所以你可以做类似的事情。我的评论是条目申请中的入门模型。

首先为Entry(like)对象添加新方法。

def get_absolute_url(self):
    return "/%i/%i/%i/entry/%i/%s/" % (self.date.year, self.date.month, self.date.day, self.id, self.slug)

它为入口对象生成url。 URL示例:/ 2009/12/12 / entry / 1 / lorem-ipsum /

要urls.py添加1行:

(r'^comments/posted/$', 'smenteks_blog.entries.views.comment_posted'),

所以现在你的urls.py文件中至少应该有两行注释。

(r'^comments/posted/$', 'smenteks_blog.entries.views.comment_posted'),
(r'^comments/', include('django.contrib.comments.urls')),

对于views.py文件中的条目(如)应用程序添加功能:

from django.contrib.comments import Comment #A
...
def comment_posted(request):
    if request.GET['c']:
        comment_id = request.GET['c'] #B
        comment = Comment.objects.get( pk=comment_id )
        entry = Entry.objects.get(id=comment.object_pk) #C
        if entry:
            return HttpResponseRedirect( entry.get_absolute_url() ) #D
    return HttpResponseRedirect( "/" )    
  • A)导入文件顶部 访问评论对象,
  • B)得到 comment_id表格REQUEST,
  • C)抓取 入境对象,
  • D)使用 get_absolute_url方法 适当的重定向。

现在:

  • 在入口网站上的评论表单中的发布按钮会重定向同一(条目)网站上的用户。
  • 预览网站上的发布按钮会将用户重定向到正确的(条目)网站。
  • 在条目网站和预览网站上的评论表单中的预览按钮会在预览网站上重定向用户
  • 感谢页面不再使用(我认为该页面非常烦人)。

接下来要做的就是覆盖preview.html模板:

  • 转到django框架目录,在linux下它可以通过/ usr / share / pyshared /。
  • 从DJANGO_DIR / contrib / comments / templates / comments / preview.html
  • 获取原始的preview.html模板
  • 将其复制到项目中的模板目录PROJECT_DIR / templates / comments / entries_preview.html
  • 从现在开始,它会覆盖默认模板,您可以通过以下方式更改扩展名:{%extends“your_pagelayout.html”%}以使您的布局和所有css文件正常工作。

答案 1 :(得分:1)

答案 2 :(得分:1)

更新:现在可以选择重定向作为评论表单的一部分:请参阅http://docs.djangoproject.com/en/dev/ref/contrib/comments/#redirecting-after-the-comment-post

答案 3 :(得分:1)

看看“Django-1.4 / django / contrib / comments / templates / comments /”文件夹,你会在“form.html”文件中看到,有一行

{% if next %}<div><input type="hidden" name="next" value="{{ next }}" /></div>{% endif %}

因此,在Article-Detail视图中,您可以在上下文数据中包含“next”属性,然后注释框架将完成剩下的工作

class ArticleDetailView(DetailView):
    model = Article
    context_object_name = 'article'

    def get_context_data(self, **kwargs):
        context = super(ArticleDetailView, self).get_context_data(**kwargs)

        context['next'] = reverse('blogs.views.article_detail_view', 
            kwargs={'pk':self.kwargs['pk'], 'slug': self.kwargs['slug']})
        return context

答案 4 :(得分:0)

这是一个非常简单的重定向实现。它会将您重定向回到发表评论的页面。

发布评论时,网址评论/发布/调用视图comment_posted,然后重定向回参考页面。

请务必将[app_name]替换为您的应用程序名称。

views.py

from urlparse import urlsplit

def comment_posted( request ):
    referer = request.META.get('HTTP_REFERER', None)
    if referer is None:
        pass
    try:
        redirect_to = urlsplit(referer, 'http', False)[2]
    except IndexError:
       pass
    return HttpResponseRedirect(redirect_to)

urls.py

( r'^comments/posted/$', '[app_name].views.comment_posted' ),