从django中的fortran模块调用函数会导致AttributeError

时间:2014-10-21 11:48:59

标签: python django fortran

我有一个用Fortran写的简单子程序。仅仅出于测试原因,它就像这样简单:

!test.f90
subroutine test()
end subroutine test

它与gfortranf2py编译得很好。我用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。我是pythondjango新手,所以我想我可能会犯一些“愚蠢”的错误。

修改

现在,感谢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 ,我终于做到了。问题出在文件的路径上。我必须将文件放在项目的根文件夹中。

1 个答案:

答案 0 :(得分:1)

如果您import test,则为test.test() 如果您from test import *,则为test()

请参阅The import system