如何在Django的views.py index函数中集成自定义Python代码?
首先,先揪出最明显的错误:你写的导入语句from my definitions import *里有个不该有的空格!你的文件明明是mydefinations.py,所以正确的导入应该是:
from mydefinations import * from yahoo import *
这是拼写和格式的低级错误,先把这个改过来。
接下来,就算修正了拼写,Django项目里的模块导入还要注意路径问题——因为Django有严格的包结构,Python只会在特定目录下查找模块。你可以按下面的步骤来确保模块能被正常找到:
把文件放在和views.py同一个目录下
最简单的方法就是把st.py、mydefinations.py、yahoo.py这三个文件直接复制到你的Django app的目录里(也就是和views.py、models.py同个文件夹)。这样Python就能直接识别到它们,导入语句不需要再做其他修改。如果要放在项目根目录,需要添加路径
如果你想把这些工具类文件放在项目根目录(比如和manage.py同个层级),那你需要让Python能识别这个目录。可以在views.py的开头添加这段代码,把项目根目录加入Python的搜索路径:import sys import os sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))这样Python就会去项目根目录找你的模块了。
把这些文件做成一个可导入的包(更规范的做法)
在项目里新建一个文件夹(比如叫utils),把这三个文件放进去,然后在这个文件夹里新建一个空的__init__.py文件(这样Python就会把这个文件夹当成一个合法的包)。之后导入的时候就可以写成:from utils.mydefinations import * from utils.yahoo import *
最后还有个小提醒:在Django的视图函数里直接执行爬取数据的操作(比如你代码里的yahoo.yahoo_stats()),如果请求耗时较长,会拖慢页面响应速度。建议后续考虑用异步任务框架(比如Celery)来处理这类耗时操作,避免用户长时间等待。
内容的提问来源于stack exchange,提问作者Huzaifa Zahoor

