将views.py拆分为模块期间发生未定义的变量错误-Django

我在views.py中的代码越来越大,现在我想将其拆分为模块。但是我对变量有麻烦。问题在于我不应该在自定义模块或views.py中声明变量或导入内置模块。这是我的代码:

views.py

@login_required(login_url='sign_in')
def result(request):
    find_by_fives()
    context = {
        'last_uploaded': last_uploaded,'words_count': words_count,'characters_count': characters_count
    }
    return render(request,'result.html',context)

find_by_fives.py(是我的自定义模块):

import glob 
from .models import OriginalDocument
from django.shortcuts import render

def find_by_fives():
    last_uploaded = OriginalDocument.objects.latest('id')

    original = open(str(last_uploaded.document),'r')
    original_words = original.read().lower().split()
    words_count = len(original_words)

    open_original = open(str(last_uploaded.document),"r")
    read_original = open_original.read()
    characters_count = len(read_original)

    path = 'static/other_documents/doc*.txt'
    files = glob.glob(path)                       

错误:NameError: name 'last_uploaded' is not defined

注意:这不是我的全部观点,我只想知道应该在哪里声明context,变量和导入。

csx80088 回答:将views.py拆分为模块期间发生未定义的变量错误-Django

好吧,我知道-“ find_by_fives.py”是一个函数,对吗?因此,您在其中声明的变量仅存在于此。因此,当您从views.py调用此函数时-它们会被声明,然后,当函数结束时,它们会被删除。如果要在views.py中使用它们-应该返回它们并在其中分配一个变量,然后将它们传递给上下文:

@login_required(login_url='sign_in')
def result(request):
   last_uploaded,words_count,characters_count = find_by_fives()
   context = {
       'last_uploaded': last_uploaded,'words_count': words_count,'characters_count': characters_count
   }
   return render(request,'result.html',context)

def find_by_fives():
   last_uploaded = OriginalDocument.objects.latest('id')

   original = open(str(last_uploaded.document),'r')
   original_words = original.read().lower().split()
   words_count = len(original_words)

   open_original = open(str(last_uploaded.document),"r")
   read_original = open_original.read()
   characters_count = len(read_original)

   path = 'static/other_documents/doc*.txt'
   files = glob.glob(path) 
   return last_uploaded,characters_count 
本文链接:https://www.f2er.com/2591733.html

大家都在问