Django:使用带有 Django 变量的外部函数
Django: Use external function with django variables
嗨,我是 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)
(目前我从shell插入'des'、'x'、'y')
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)
实际上我会用 models.py 的 'x' 和 'y' 变量代替 'a' 和 'b' 并且我只对执行 [=67= 感兴趣] 并将结果放入 'res' 变量。
最后我在浏览器上显示了我的应用程序(table),类似于:
|DES| × | Y |RES|
|bla |1.3 | 0.4| 0.0 |
|asd |2.0|1.3| 0.0 |
等--
RES 是我要显示 'res' 的列(当然现在为零)
我已将 oper.py 放入 Django 应用程序文件夹中。我尝试导入变量等等但没有成功!我没有想法!
大大"thank you"给那些可以帮助我的人!
正如 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 行的 calls/uses 'add_divide' 功能如何。
嗨,我是 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)
(目前我从shell插入'des'、'x'、'y')
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)
实际上我会用 models.py 的 'x' 和 'y' 变量代替 'a' 和 'b' 并且我只对执行 [=67= 感兴趣] 并将结果放入 'res' 变量。
最后我在浏览器上显示了我的应用程序(table),类似于:
|DES| × | Y |RES|
|bla |1.3 | 0.4| 0.0 |
|asd |2.0|1.3| 0.0 |
等--
RES 是我要显示 'res' 的列(当然现在为零) 我已将 oper.py 放入 Django 应用程序文件夹中。我尝试导入变量等等但没有成功!我没有想法!
大大"thank you"给那些可以帮助我的人!
正如 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 行的 calls/uses 'add_divide' 功能如何。