Django:如何在其他python脚本中使用表单值?

时间:2018-10-26 23:29:48

标签: python django

这是我的views.py

from django.shortcuts import render
from .reisplanner import *

def home(request):
    return render(request, 'home.html', {})

def reisplanner(request):
    if request.method == 'POST':
        form = reisplannerForm(request.POST)

    if form.is_valid():
        beginstation = form.cleaned_data['beginstation']
        eindstation = form.cleaned_data['eindstation']

        print(beginstation, eindstation)
    else:
        form = reisplannerForm()

    return render(request, 'reisplanner.html', {'form': form})

这是forms.py

from django import forms

class reisplannerForm(forms.Form):
    beginstation = forms.CharField(required=True)
    eindstation = forms.CharField(required=True)

我想使用reisplanner.py

中的变量
def reisplanner():
    #
    # use the values of the form here
    #

我实际上已经尝试了一切,这是一个学校项目,并且已经尝试修复了大约2天,但是没有结果。

如果你们能帮助我,那太好了。如何获取表单值到python脚本?

1 个答案:

答案 0 :(得分:0)

reisplanner.py

def my_reisplanner(form):
    beginstation = form.cleaned_data['beginstation']
    eindstation = form.cleaned_data['eindstation']
    # Do somthing with the values

views.py

from django.shortcuts import render
from .reisplanner import *

def home(request):
    return render(request, 'home.html', {})

def reisplanner(request):
    if request.method == 'POST':
        form = reisplannerForm(request.POST)

    if form.is_valid():
        beginstation = form.cleaned_data['beginstation']
        eindstation = form.cleaned_data['eindstation']

        print(beginstation, eindstation)

        # You can call this function because you imported it in line 2
        my_reisplanner(form)
    else:
        form = reisplannerForm()

    return render(request, 'reisplanner.html', {'form': form})

这里唯一的问题是要调用的函数的名称。如果对视图函数和过程函数使用相同的名称,则导入时会出现问题。

在上一代码段中,我将过程函数重命名为my_reisplanner,以避免发生冲突。如果您不想(或无法)重命名流程功能(请参阅下文),还有其他解决方案。

通常,不鼓励这种导入

from .reisplanner import *

,因为您无法控制导入的内容。喜欢这个:

from .reisplanner import reisplanner as reisplanner_name_alias
# [...]
# Call reisplanner using local alias created from imports
reisplanner_name_alias()

或者简单地

from . import reisplanner
# [...]
# Call reisplanner using full modul dotted path
reisplanner.reisplanner()