在Django中向渲染模板添加验证错误消息(通过views.py)

时间:2016-02-13 13:06:02

标签: python django validation

我已经编写了一个验证程序,用于检查以确保在用户可以移动到另一个视图之前上载了一定数量的图像。我知道验证工作正常,因为如果没有足够的图像,我已成功将它们重定向回上传页面,如果有的话,则将其重定向到预览页面。

CODE

@login_required
def preview_website(request, slug):
    student = Student.objects.get(slug=slug)

    if student.studentimage_set.filter(image_type="portrait").exists() and
student.studentimage_set.filter(image_type="interest1").exists() and 
student.studentimage_set.filter(image_type="interest2").exists() and 
student.studentimage_set.filter(image_type="interest3").exists():
        return render(request, 'students/preview_website.html', {
            'student': student,
        })
    else:
        return redirect('upload_student_image', slug=student.slug)

我现在遇到的问题是错误通知。我想让他们知道他们需要添加更多图片才能继续前进。有没有办法通过views.py 来打印模板顶部的通知? (我知道在表单或模型中使用验证更为标准,但这是一种特殊情况。)

我已经尝试了以下操作,但是我收到了一个错误页面,没有干净的回到图片上传页面:

    else:
        raise ValidationError("Please make sure you have uploaded 4 images!")

我也尝试过以下操作,但我没有在模板页面上看到任何内容:

    else:
        msg = "Please make sure you have uploaded 4 images!"

我已经通读了:17105947,但解决方案对我不起作用。

有什么想法吗?我是编程和Django的新手,所以我希望这只是我的一个小疏忽和相对简单的修复!

2 个答案:

答案 0 :(得分:0)

您可以在if范围后面的模板中添加错误消息。

在您看来:

@login_required
def preview_website(request, slug):
    student = Student.objects.get(slug=slug)

    if student.studentimage_set.filter(image_type="portrait").exists() and
student.studentimage_set.filter(image_type="interest1").exists() and 
student.studentimage_set.filter(image_type="interest2").exists() and 
student.studentimage_set.filter(image_type="interest3").exists():
        return render(request, 'students/preview_website.html', {
            'student': student})
    else:
        error_message = "Please make sure you have uploaded 4 images!" 
        return render(request, 'students/preview_website.html', {
            'student': student, 'error_message': error_message})


将其添加到模板顶部

{% if error_message %}
  <p>{{ error_message }}</p>
{% endif %}

答案 1 :(得分:0)

你可以通过

来做到这一点
length(request.FILES)

在视图中,如果长度小于您想要的长度,您可以返回上传html

return render_to_response('upload.html',{'error':error},context_instance=RequestContext(request))

在html页面中使用以下样式可以显示错误

{% if error %}
    {{ error }}
{% endif%}