Я показываю запись с помощью DetailView, а также имею форму комментариев на той же странице.
Форма комментария отлично работает для представлений, но не отображает ошибки проверки.
Я не могу понять, как передать оба slug (требуется для DetailView) И form ( который содержит ошибки проверки).
Я не пытаюсь отобразить слаг в своем html-шаблоне - мне нужен слаг для получения подробного представления записи.
URL:
...
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 (есть ли способ сделать это без передачи слага в URL-адрес?) и включить форму в контекст, чтобы я мог отображать ошибки проверки формы комментариев.
Искал вокруг, не смог найти подходящих ответов.