我在 DetailView 类中使用了内联表单集。
class DetailView(DetailView)
为了正确显示页面,我使用了get_context_data函数:
def get_context_data(self, *args, **kwargs):
context = super(QuestionDetailView, self).get_context_data(**kwargs)
context['formset'] = self.get_formset()
context['question'] = self.get_object()
return context
CSS 和 JS 在这个页面上运行得很好。但是,我不知道如何在表单集无效的情况下使页面也能很好地呈现
def post(self, request, slug):
[...]
formset = self.AnswerFormset(request.POST, instance=self.get_object()) # create/edit an answer
if formset.is_valid():
return self.form_valid(formset, slug)
else:
return render(request, 'questions/detail.html', {'slug': slug, 'formset': formset,'question':self.get_object()})
def form_valid(self, formset, slug):
formset.save()
return redirect('questions:question_detail', slug=slug)
如果表单集有效,则所有样式和 Java 脚本都可以正常工作。如果表单无效,则位于 questions/detail.html 上的样式和脚本将不起作用。
我花了很多时间试图以某种方式向 get_context_data 传达错误,但我失败了并单独渲染了页面(return render(request, 'questions/detail.html', {'slug': slug, 'formset ': 表单集,'问题':self.get_object()})
您知道如何正确呈现表单错误的页面吗?干杯
最佳答案
您重写 post
和 form_valid
方法的方式表明(对我来说)使用 DetailView
并不是最合适的。为什么不使用基于 FormView
类的 View 呢?您可以查看this link if you want to read more 。
它将带来您需要的 form_valid
、post
等定义,而无需覆盖它们。
此外,如果您想向上下文添加更多元素,则覆盖 get_context_data
的方法是一个很好的方法,因此如果您想从模板访问所需的对象,请保持这种方式最初通过您的 DetailView
显示。
但是因为您需要对表单进行检查,所以我肯定会使用 FormView
而不是 DetailView
,然后通过 context< 添加缺少的内容
.
关于javascript - Django 不通过 DetailView 重新渲染 css 和 JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59471525/