【问题标题】:Django is not re-rendering css & JS via DetailViewDjango 没有通过 DetailView 重新渲染 css 和 JS
【发布时间】:2020-04-15 16:46:25
【问题描述】:

我在 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 ': formset,'question':self.get_object()})

您对如何正确呈现带有表单错误的页面有任何想法吗?干杯

【问题讨论】:

    标签: javascript django


    【解决方案1】:

    覆盖postform_valid 方法的方式表明(对我而言)DetailView 的使用不是最合适的。为什么不使用基于FormView 类的视图呢?您可以查看this link if you want to read more

    它将为您带来form_validpost 等所需的定义,而无需覆盖它们。

    此外,如果您想在上下文中添加更多元素,那么覆盖get_context_data 的方法是一种不错的方法,因此如果您想从模板访问最初希望通过您的对象显示的对象,请保持这种方式DetailView.

    但是因为您要对表单进行检查,所以我肯定会使用FormView 而不是DetailView,然后通过context 添加缺少的内容。

    【讨论】:

      【解决方案2】:

      如果出现错误,则会生成来自另一个表单组的小部件,因此其中没有更具体的设置。

      【讨论】:

      • 如果您想为您的问题添加精确度,只需编辑原始问题帖子或发表评论,而不是回答它!
      猜你喜欢
      • 1970-01-01
      • 2011-09-06
      • 2012-05-14
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-25
      相关资源
      最近更新 更多