我正在尝试在我的项目中使用评论应用程序。
我尝试使用代码({%render_comment_form for event%}),如下文档中所示: Django comments
问题是如何在提交后将表单重定向到同一页面。
另一个重要问题是: 目前,如果我们在for中发现任何错误,那么我们将被重定向到预览模板。 是否可以避免此行为并在同一表单上显示错误(在同一页面上)?
答案 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( "/" )
现在:
接下来要做的就是覆盖preview.html模板:
答案 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' ),