【发布时间】:2013-12-28 21:35:35
【问题描述】:
我正在使用 DetailView 显示一个条目,并且在同一页面上还有一个评论表单。
评论表单可以正常提交,但不会显示验证错误。
我不知道如何通过 both slug(DetailView 所需)AND 表单(包含验证错误)。
我不想在我的 html 模板中显示 slug —— 我需要 slug 来检索条目的详细视图。
网址:
...
url(r'^(?P<slug>[\w-]+)/$', EntryDetailView.as_view(), name='entry_detail'),
...
查看:
class EntryDetailView(DetailView):
template_name = "entry_detail.html"
def get_context_data(self, **kwargs):
context = super(EntryDetailView, self).get_context_data(**kwargs)
context['comments'] = [(comment, comment.get_children_count()) for comment in EntryComment.get_tree()]
entry_comment_form = EntryCommentForm()
context['entry_comment_form'] = entry_comment_form
return context
def get_object(self, **kwargs):
# If the user created the entry:
try: return Entry.objects.get(Q(slug=self.kwargs['slug']), author=self.request.user.id)
except: pass
# If the user received the entry:
try: return Entry.objects.get(Q(slug=self.kwargs['slug']), recipients=self.request.user)
except: pass
# Otherwise, bye-bye.
raise Http404
def post(self, request, *args, **kwargs):
entry_comment_form = EntryCommentForm(request.POST)
if entry_comment_form.is_valid():
entry_comment_form.add_method(
author=entry_comment_form.cleaned_data['author'],
body=entry_comment_form.cleaned_data['body'],
date_created=datetime.datetime.now()
)
success(request, 'Success')
slug = self.kwargs['slug']
# Proper? It works.
return HttpResponseRedirect(reverse('entry_detail', subdomain='blog', kwargs={'slug':slug}))
else:
error(request, 'Error')
slug = self.kwargs['slug']
# Here's where I need to render the same Entry but include the form context so I can display the validation errors.
return render(
request,
reverse('entry_detail', kwargs={'slug':slug}),
{'entry_comment_form':entry_comment_form}
)
由于我缺少 python/django foo,这似乎只是某个地方的菜鸟错误。
最终目标是显示相同的 DetailView 页面(有没有办法在不将 slug 传递给 url 的情况下做到这一点?)并将表单包含在上下文中,以便我可以显示评论表单验证错误。
四处搜索,找不到任何相关答案。
【问题讨论】:
标签: django django-views django-urls