首页 > 解决方案 > Django:如何在其他 python 脚本中使用表单值?

问题描述

这是我的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 脚本?

标签: pythondjango

解决方案


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})

这里唯一的问题是要调用的函数的名称。如果您对视图函数和流程函数使用相同的名称,您将遇到导入问题。

在前面的代码片段中,我重命名了 process 函数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()

推荐阅读