Django:使用带有django变量的外部函数

时间:2015-01-27 11:44:08

标签: python django variables import

嗨,我是Django和Python的新手,我遇到了很大麻烦: 我会执行一个Django应用程序,允许我输入两个数字并使用外部函数(一个非常简单的python文件)进行任何数学运算(无关紧要)。我希望能够明确提出这个问题:

如何在外部函数中调用我的两个数字,然后将获得的结果导入我的Django应用程序?

我用一些代码解释:

models.py

from django.db import models

class ElementiTab(models.Model):
    des = models.CharField(max_length=30)
    x = models.FloatField()
    y = models.FloatField()
    res = models.FloatField(default=0)

(目前我插入' des',' x',' y'来自shell)

forms.py

from django import forms               
from .models import ElementiTab

class  ElementiTabForm(forms.ModelForm):        

    class Meta:                        
        model =  ElementiTab
        fields = ('des', 'x', 'y','res' )

其中' des'是一个简单的描述

' X'并且' y'是我的两个数字

' res'是我的外部功能的结果

views.py(html不是一个残缺的)

from django.shortcuts import render
from .models import ElementiTab

def tabval(request):
    valori = ElementiTab.objects.filter()
    return render(request, 'apptabella/tabval.html', {'valori': valori})

我的外部函数,在IDLE Python中,可以工作:

oper.py

a = float(input('a =  '))
b = float(input('b =  '))

operation = (a+b)/b

print (operation)

实际上,我会讨论一个'一个'和' b'用' x'并且' y' models.py的变量,我只对执行'操作'并将结果放入' res'变量

最后,我在浏览器上显示了我的应用程序(表格),类似于:

| DES | X | Y | RES |

| bla | 1.3 | 0.4 | 0.0 |

| asd | 2.0 | 1.3 | 0.0 |

等 -

RES是我想要显示的列' res' (当然是零) 我已将oper.py放在Django app文件夹中。我试图导入变量等等但没有成功!我没有想法!

一个大"谢谢"那些能帮助我的人!

1 个答案:

答案 0 :(得分:2)

正如Daniel在评论中所提到的,你可以导入任何其他python文件。有两件事需要考虑:

1)您是否尝试将oper.py导入为“import oper.py”或“import oper”?它必须是后者。

2)你可能想在oper.py中定义一个函数,例如,对你上面写的内容稍作修改:

def add_divide(a, b):
    a = float(a)
    b = float(b)
    operation = (a+b)/b
    return operation

然后你可以从你的views.py中调用它:

import oper
oper.add_divide(5,10)

如果您在从其他文件导入时陷入困境,请尝试在views.py

中添加tabval上方的函数

更新 - 我不确定你的目标是实际尝试读取外部文件,但如果x和y来自表单,你通常会这样做:

from django.db import models

class ElementiTab(models.Model):
    des = models.CharField(max_length=30)
    x = models.FloatField()
    y = models.FloatField()
    res = models.FloatField(default=0)


    def save(self, *args, **kwargs):
        self.res = (float(self.x)+float(self.y))/float(self.y)
        super(ElementiTab, self).save(*args, **kwargs)

此处有更多详情:https://docs.djangoproject.com/en/1.7/topics/db/models/#overriding-predefined-model-methods

更新: 可以在此处找到将所有内容联系在一起的示例:https://github.com/kelvinn/externaloperexample

特别是,请查看models.py文件: https://github.com/kelvinn/externaloperexample/blob/master/apptabella/models.py

它如何在第2行和第11行调用/使用'add_divide'函数。