【问题标题】:Django: Use external function with django variablesDjango:使用带有 Django 变量的外部函数
【发布时间】:2015-01-27 11:44:07
【问题描述】:

您好,我是 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”,我只对执行“操作”感兴趣并将结果放入“res”变量中。

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

|DES| X |是 |RES|

|bla |1.3 | 0.4| 0.0 |

|asd |2.0|1.3| 0.0 |

等--

RES 是我要显示“res”的列(当然现在为零) 我已将 oper.py 放在 Django 应用程序文件夹中。我尝试导入变量等但没有成功!我没有想法!

非常感谢那些可以帮助我的人!

【问题讨论】:

  • 我不太确定你在这里问什么。 Django 就是 Python,你可以导入任何外部模块并调用它的函数。
  • 这个我知道;但问题(对我来说)是如何导入然后使用任何外部模块。我是新人..你能给我一些建议吗?
  • 但是当您导入 Django 模块时,您在代码中使用了 import fine。为什么导入你自己的会不一样?
  • 如果我尝试在 models.py 中导入 oper.py,我会出现“未解决的导入”错误,如果我尝试在 oper.py 中导入 x 和 y 形式 models.py并设置 a = x 和 b = y。所以我的麻烦是如何将'x','y'与'a','b'和'operation'与'res'“连接”。我必须以不同的方式定义“res”、“a”、“b”?怎么样?

标签: python django variables import


【解决方案1】:

正如 Daniel 在 cmets 中提到的,您可以导入任何其他 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”函数。

【讨论】:

  • 当然可以导入!但我会将以前保存在数据库中的 'x' 和 'y' 值而不是 (5, 10) 放入数据库中,并且我会告诉我的数据库 res = model.FloatField 是“操作”!
  • 好的,我必须保存操作的结果,谢谢你的链接!我的目标是从外部文件做一些“操作”!您描绘了一个非常复杂的函数,我无法在 models.py 中定义它,因为它太长太复杂,无法在那里编写!在这个问题中,我仅使用了一个简单的功能。在 Django 文档上,我没有找到任何关于我的麻烦的例子。对不起,我很新,但如果可能的话,我需要理解这一点。
  • 嗨 Beatrix - 我花了一些时间编写了一个使用外部文件的示例,将我们上面讨论的所有内容结合在一起。如果这对您有帮助,那么请考虑接受答案:)
  • 你为像我这样的“新手”解决了一个非常困难的问题。现在我研究你宝贵的代码:) 我不能给你的答案+1,因为我的声望只有 1!
  • 不用担心 - 我们都必须从某个地方开始!祝你冒险顺利。
猜你喜欢
  • 2021-03-24
  • 1970-01-01
  • 2019-12-10
  • 1970-01-01
  • 1970-01-01
  • 2010-11-23
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多