python - 查询数据时加载“搜索页面”会产生“404 页面未找到”页面
问题描述
我有一个加载良好的页面“.com/listings”,但是当我通过表单运行查询时,会产生以下错误:
找不到页面 (404) 请求方法:GET 请求 URL: http: //127.0.0.1 :8000/listings/search?keywords=&city=Corpus+Christi 提出者:listings.views.listing
它应该呈现一个“.com/listings/search”页面。
以前我让它工作得很好,但是在我成功地将单个列表页面的 url 路径 - “列表/列表”更改为整数的字符串后,它导致我的搜索页面出现这个问题。可能是巧合,但我相信它可以联系起来。
网址.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='listings'),
path('<str:listing_title>', views.listing, name='listing'),
path('search', views.search, name='search'),
]
视图.py
from django.shortcuts import get_object_or_404, render
from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator
from .choices import price_choices, city_choices, bed_choices, bath_choices
from .models import Listing
from agents.models import Agent
from contacts.models import Contact
def index(request):
listings = Listing.objects.order_by('-list_date').filter(is_published=True)
paginator = Paginator(listings, 6)
page = request.GET.get('page')
paged_listings = paginator.get_page(page)
context = {
'listings': paged_listings,
'price_choices': price_choices,
'city_choices': city_choices,
'bed_choices': bed_choices,
'bath_choices': bath_choices
}
return render(request, 'listings/listings.html', context)
def listing(request, listing_title):
listing = get_object_or_404(Listing, title=listing_title)
context = {
'listing': listing,
}
return render(request, 'listings/listing.html', context)
def search(request):
queryset_list = Listing.objects.order_by('list_date')
if 'keywords' in request.GET:
keywords = request.GET['keywords']
if keywords:
queryset_list = queryset_list.filter(description__icontains=keywords)
if 'city' in request.GET:
city = request.GET['city']
if city:
queryset_list = queryset_list.filter(city__icontains=city)
if 'pricerange' in request.GET:
pricerange = request.GET['pricerange']
if pricerange:
queryset_list = queryset_list.filter(price__lte=pricerange)
if 'bed' in request.GET:
bed = request.GET['bed']
if bed:
queryset_list = queryset_list.filter(bedrooms__lte=bed)
if 'bath' in request.GET:
bath = request.GET['bath']
if bath:
queryset_list = queryset_list.filter(bathrooms__lte=bath)
context = {
'price_choices': price_choices,
'city_choices': city_choices,
'bed_choices': bed_choices,
'bath_choices': bath_choices,
'listings': queryset_list,
'values': request.GET
}
return render(request, 'listings/search.html', context)
解决方案
Django 从上到下尝试 URL 路由。那么发生了什么?
当调用url http://127.0.0.1:8000/listings/search时,Django 是第一个尝试
path('<str:listing_title>', views.listing, name='listing'),
并将“搜索”解释为“listing_title”的值。因为没有名为“搜索”的列表,所以页面返回 404 错误。
改变你urls.py
的
path('', views.index, name='listings'),
path('search', views.search, name='search'),
path('<str:listing_title>', views.listing, name='listing'),
你的代码会正常工作。
推荐阅读
- javascript - 如何单击 selenium webdriver 中的剑道下拉菜单?
- xpath - XPath 从嵌套的 Div 中提取特定文本
- php - 网络服务 SOAP 中的参数
- reactjs - 无状态组件中如何设置状态、对象值?
- python - 模糊比较两个字符串,如果比率大于 x,则将 1 或 0 添加到 df,8 百万行数据集
- c# - 条件格式 C# AND 语句空白不起作用
- javascript - 如何运行此 AJAX JavaScript 编码?
- amazon-vpc - VPC 流日志:AWS 为什么会排除一些流量
- mongodb - 将 MongoDb 连接池与 Go 应用程序一起使用
- python - Python Django admin 迭代并显示