Django views.py:无法使用vrable外部函数



我希望在填写django表格时打开一个新页面-点击enter/点击"搜索"输入,并使用表格中输入的数据在该页面中显示结果。

表单.py:

class SearchBar(forms.Form):
Search = forms.CharField(label='', max_length=100, widget=forms.TextInput)

带有表单的HTML页面看起来像:

index.html

<form class="" action="result" method="post">

{% csrf_token %}
{{ form1.as_table }}
<input class="Search" type="submit" name="" value="Search">
</form>

我希望提交此表格打开一个新页面:result.html

我已经将"结果"的url设置为所述HTML页面:

urls.py

urlpatterns=[
path('result', views.result, name='result'),
]

我已经提取了form1.cleaned_data['Search']在中输入的数据。

form_input=form1.cleaned_data['Search']

但是,一旦打开结果页面,就会显示数据(form_input(未定义。显示以下错误:

name 'form_input' is not defined

我无法在views.py文件的任何其他函数中使用此数据(form_input(。

视图.py

def index(request):
form1 = forms.SearchBar()
if request.method == "POST":
form1 = forms.SearchBar(request.POST)
if form1.is_valid():
global form_input
form_input= (form1.cleaned_data['Search'])
def result(request):
print(form_input)

我不明白为什么会发生这种事。我甚至已经将变量form_input声明为global变量。

您必须执行以下操作:

视图.py

from . forms import SearchBar
def search_view(request):
if request.method == "POST":
form = SearchBar(request.POST)
if form.is_valid():
form_input = form.cleaned_data['Search']
search_result = # your search query using the form_input variable
return render(request, "result.html", {"search_result ": search_result })

如果我能准确地理解,你想在base.html(所有其他模板都继承自的基本模板(中设置搜索栏,那么你在模板中的搜索栏应该写这样的东西:

<form action={% url 'search_view' %} method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Search</button>
</form>

result.html看起来像这样:

{% for item in search_result %}
{{ i.name }}
{% endfor %}

更新

很明显,搜索栏的目的是过滤和显示给定模型的对象,例如,如果你有一个User模型:

class User(models.Model):
name = models.CharField(max_length=50)
is_active = models.BooleanField(default=True)

并且想要根据user.name过滤对象,那么代码行看起来像这样:

search_results = User.objects.filter(name__contains=form_input)

因此,例如,如果您有3个名称为Tom JablinskiTommy JoeJack White的用户(例如(,并搜索Tom,则会得到一个包含2个用户对象的查询集:汤姆JablinskiTommy Joe,它们将显示在result.htmltemaplate中。

最新更新