gpt4 book ai didi

python - 将用户值从一个模板重定向到另一个模板 - Django

转载 作者:行者123 更新时间:2023-12-01 01:27:10 27 4
gpt4 key购买 nike

尝试将用户给出的值从一个页面重定向到下一个页面。一切都可以在一个 View 中完成,但是当我尝试使用 HttpResponseRedirect 重定向到下一个 View 时,Django 返回错误“NameError at/search_results, name '' is not Define”。如何将“文本”值从一个 View 传递到另一个 View (传递到我的搜索结果)

我的views.py(效果很好,用户在一个字段中给出的值,从django-filters返回相应的cure结果)

def test_views(request):
form = MeanForm(request.POST)
if form.is_valid():
text = form.cleaned_data['name']
else:
text = None
search_users = SearchWoman(request.GET, queryset=Woman.objects.all().filter(city=text))

context = { 'form': form, 'text': text, 'filter': search_users }
return render(request, 'test.html', context)

我的test.html

<h1>TEST_1</h1>
<form method="POST" class="post-form">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="save btn btn-default">Submit</button>
</form>

<h2> {{ text }} </h2>

<h1><br></br></h1>

{% for profile in filter.qs %}
<li>{{ profile.name }} </li>
{% endfor %}

我的过滤器.py

from .models import Woman
import django_filters

class SearchWoman(django_filters.FilterSet):

class Meta:
model = Woman
fields = ['city', 'rating']

我的 forms.py

from django import forms
from .models import Mean

class MeanForm(forms.ModelForm):

class Meta:
model = Mean
fields = ('name',)

我如何尝试进行重定向(它返回错误“NameError at/search_results, nazwa”“未定义”)

def test_views(request):
form = MeanForm(request.POST)
if form.is_valid():
text = form.cleaned_data['name']
return HttpResponseRedirect('/search_results/')
else:
text = None

context = { 'form': form, 'text': text, }
return render(request, 'test.html', context)

def search_results(request):
search_users = SearchWoman(request.GET, queryset=Woman.objects.all().filter(city=text))
context = { 'search_user': search_users }
return render(request, 'search_results.html', context)

模板错误(应用第二个 View 后)

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/search_results/

Django Version: 2.1.3
Python Version: 3.7.0
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'host_app',
'django_filters']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "C:\Users\tymot\Desktop\agencja_modeli_modelek\env\lib\site-packages\django\core\handlers\exception.py" in inner
34. response = get_response(request)

File "C:\Users\tymot\Desktop\agencja_modeli_modelek\env\lib\site-packages\django\core\handlers\base.py" in _get_response
126. response = self.process_exception_by_middleware(e, request)

File "C:\Users\tymot\Desktop\agencja_modeli_modelek\env\lib\site-packages\django\core\handlers\base.py" in _get_response
124. response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\tymot\Desktop\agencja_modeli_modelek\app_rama\host_app\views.py" in search_results
59. search_users = SearchWoman(request.GET, queryset=Woman.objects.all().filter(city=text))

Exception Type: NameError at /search_results/
Exception Value: name 'text' is not defined

**编辑:错误代码:**

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/test/

Django Version: 2.1.3
Python Version: 3.7.0
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'host_app',
'django_filters']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "C:\Users\tymot\Desktop\agencja_modeli_modelek\env\lib\site-packages\django\core\handlers\exception.py" in inner
34. response = get_response(request)

File "C:\Users\tymot\Desktop\agencja_modeli_modelek\env\lib\site-packages\django\core\handlers\base.py" in _get_response
126. response = self.process_exception_by_middleware(e, request)

File "C:\Users\tymot\Desktop\agencja_modeli_modelek\env\lib\site-packages\django\core\handlers\base.py" in _get_response
124. response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\tymot\Desktop\agencja_modeli_modelek\app_rama\host_app\views.py" in test_views
50. return HttpResponseRedirect(reverse('search_results', args=[text]))

File "C:\Users\tymot\Desktop\agencja_modeli_modelek\env\lib\site-packages\django\urls\base.py" in reverse
90. return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))

File "C:\Users\tymot\Desktop\agencja_modeli_modelek\env\lib\site-packages\django\urls\resolvers.py" in _reverse_with_prefix
622. raise NoReverseMatch(msg)

Exception Type: NoReverseMatch at /test/
Exception Value: Reverse for 'search_results' not found. 'search_results' is not a valid view function or pattern name.

URLS 应用程序

from django.conf.urls import url
from .import views


app_name = 'host_app'

urlpatterns = [
[...]
url(r'^test/$', views.test_views, name='test_views'),
url(r'^search_results/(?P<text>[\w\-]+)/$', views.search_results, name='search_results')
]

URLS Rama(位于 settings.py 旁边)

urlpatterns = [
path('admin/', admin.site.urls),
path('', include('host_app.urls', namespace='host_app')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

最佳答案

由于您使用的是 django-filters,因此将数据放入重定向的查询参数中是有意义的。

from django.utils.http import urlencode
from django.urls import reverse
from django.http import HttpResponseRedirect

def test_views(request):
city, rating = 'Springfield', 11 # or get them from a form
query_string = urlencode({'city': city, 'rating': rating})
next_url = '{}?{}'.format(reverse(search_results), query_string)
return HttpResonseRedirect(next_url)


def search_results(request):
search_users = SearchWoman(request.GET)
# when redirected, the url and request.GET contains data from previous view
return render(request, 'search_results.html', {'search_users': search_users})

传递数据的另一种方法是使用 session 对象。这要求django的 session 中间件处于事件状态并且客户端使用cookie。两者都是标准的,因此它应该适用于典型的网站。

from django.urls import reverse
from django.http import HttpResponseRedirect

def test_views(request):
city = 'Springfield'
request.session['city'] = city # set session['city']
return HttpResonseRedirect(reverse(search_results)


def search_results(request):
city = request.session.get('city') # get session['city']
data = request.GET.dict() # get url query parameters if any
if city:
data['city'] = city
search_users = SearchWoman(data)
return render(request, 'search_results.html', {'search_users': search_users})

session 易于使用。如果您想了解有关 session 如何工作的更多信息,请阅读 django 文档的这一部分:How to use sessions

关于python - 将用户值从一个模板重定向到另一个模板 - Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53238340/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com