javascript - Django 不通过 DetailView 重新渲染 css 和 JS

标签 javascript django

我在 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()})

您知道如何正确呈现表单错误的页面吗?干杯

最佳答案

您重写 postform_valid 方法的方式表明(对我来说)使用 DetailView 并不是最合适的。为什么不使用基于 FormView 类的 View 呢?您可以查看this link if you want to read more

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

此外,如果您想向上下文添加更多元素,则覆盖 get_context_data 的方法是一个很好的方法,因此如果您想从模板访问所需的对象,请保持这种方式最初通过您的 DetailView 显示。

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

关于javascript - Django 不通过 DetailView 重新渲染 css 和 JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59471525/

相关文章:

javascript - Node Webkit 和 Web SQL 插入 JSON 时出错

Django-cms aldryn 表单

python - 如何分配给 Django PointField 模型属性?

javascript - 如何在 Pod 之间复制文件或在 Pod 中执行?

javascript - 从 post 方法调用的文件元素在 jquery 中不可访问

javascript - 如何解决错误 "Invalid type for argument in function call. Invalid implicit conversion from address to address payable requested"

django rest框架列表更新api View

python - Django 信号不起作用

python - 带连接的 Django 查询

Javascript 将数组中的数字按每个两位数字序列求和