【问题标题】:Local variable x referenced before assignment - Django赋值前引用的局部变量 x - Django
【发布时间】:2020-12-13 18:12:05
【问题描述】:

我必须从POST 请求中获取数据值并将其写入Word 文档。但我遇到了错误。我该如何解决这个问题?

def military_document(request):
    if request.method == 'POST':
        form = CreateMilitaryDocumentForm(request.POST, request.FILES, use_required_attribute=False)
        if form.is_valid():
            group_degree = request.POST.get('group_degree')
            print(group_degree)
            form.save()
            messages.success(request, 'Added successfully !')
            return HttpResponseRedirect('military_document')
    else:
        form = CreateMilitaryDocumentForm(use_required_attribute=False)
    doc = DocxTemplate("../document.docx")
    context = {
        'form': form,
        'group_degree': group_degree,
    }
    doc.render(context)
    doc.save("generated_doc.docx")
    return render(request, 'military_document.html', context)

【问题讨论】:

  • 我假设变量是group_degree?
  • @WillemVanOnsem,是的,先生。
  • 在 GET 请求的情况下,您永远不会为 group_degree 分配任何东西,那么 group_degree 应该在 context = { ... } 中。
  • @WillemVanOnsem,很抱歉,先生,但没有得到答案。
  • 如果request.method == 'POST' 则将group_degree 设置为request.POST.get('group_degree')。如果request.methodnot 'POST',那么您不会将group_degree 设置为任何值,但您仍然尝试在context 中使用它。在这种情况下,您希望它具有什么价值?

标签: python-3.x django django-models django-views django-forms


【解决方案1】:
def military_document(request):
    if request.method == 'POST':
        form = CreateMilitaryDocumentForm(request.POST, request.FILES, use_required_attribute=False)
        if form.is_valid():
            group_degree = request.POST.get('group_degree')
            print(group_degree)
            form.save()
            messages.success(request, 'Added successfully !')
            doc = DocxTemplate("../document.docx")
            context = {
                'group_degree': group_degree,
            }
            doc.render(context)
            doc.save("generated_doc.docx")
            return render(request, 'military_document.html', context)
    else:
        form = CreateMilitaryDocumentForm(use_required_attribute=False)
    
    return render(request, 'military_document.html', {'form': form})

我不确定你在 doc.render(contect) 等中做了什么,如果你想在渲染中使用group_degree,你需要在form.is_valid() 中添加render

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 2020-05-05
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    相关资源
    最近更新 更多