我有一个用Fortran
写的简单子程序。仅仅出于测试原因,它就像这样简单:
!test.f90
subroutine test()
end subroutine test
它与gfortran
和f2py
编译得很好。我用f2py
编译它,如下所示:
$ f2py -m test -c test.f90
如果我转到python
,我可以导入它,一切正常:
>>> import test
>>> test.test() # ok. nothing as expected and with no errors
在django
我有一个名为myapp
的应用。它有一个看起来像这样的视图:
from django.shortcuts import render
from django.http import HttpResponse
from django.template import RequestContext, loader
from numpy import *
from test import * # the module itself imports ok, I get no errors
def index(request):
template = loader.get_template('myapp/index.html')
#test.test() # but if I try to call a function from it, I get an error
context = RequestContext(request,{})
return HttpResponse(template.render(context))
错误消息为:AttrubuteError at /myapp/ test
。 PS。我是python
和django
新手,所以我想我可能会犯一些“愚蠢”的错误。
修改
现在,感谢laike9m
,我设法调用了fortran函数,至少我没有错误。但与此同时,似乎该功能什么都不做。我是说这个。我稍微改变了我的fortran函数,所以它现在将一些东西写入文件。如果我在纯python
中检查它,我发现它有效 - 文件被修改。但是,如果我在django中调用它,它不会修改它。所以,我的代码现在看起来像这样:
!fortran code
!test.f90
subroutine test()
open(1,file='test.txt',status='replace')
write(1,*) "Hello, Django! My name is Fortran."
close(1)
end subroutine test
from django.shortcuts import render
from django.http import HttpResponse
from django.template import RequestContext, loader
from numpy import *
from test import * # it's ok
def index(request):
template = loader.get_template('myapp/index.html')
test() # no error any longer, but the function itself does nothing
context = RequestContext(request,{})
return HttpResponse(template.render(context))
所以,我的问题是如何检查fortran模块是否有效?
修改
感谢 laike9m 和 Vladimir ,我终于做到了。问题出在文件的路径上。我必须将文件放在项目的根文件夹中。
答案 0 :(得分:1)
如果您import test
,则为test.test()
如果您from test import *
,则为test()