【问题标题】:Loading "Search Page" produces "404 Page Not Found" page when querying data查询数据时加载“搜索页面”会产生“404 页面未找到”页面
【发布时间】:2019-09-13 01:35:54
【问题描述】:

我有一个加载良好的页面“.com/listings”,但是当我通过表单运行查询时,它会产生以下错误:

找不到页面 (404) 请求方法:GET 请求网址:http://127.0.0.1:8000/listings/search?keywords=&city=Corpus+Christi 提出者:listings.views.listing

它应该呈现一个“.com/listings/search”页面。

以前我让它工作得很好,但是在我成功地将单个列表页面的 url 路径 - “列表/列表”从整数更改为字符串后,它导致我的搜索页面出现这个问题。 可能是巧合,但我相信它是有联系的。

urls.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'),
]

views.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)

【问题讨论】:

  • 表格在哪里?

标签: python django django-views


【解决方案1】:

Django 从上到下尝试 URL 路由。那么发生了什么?

当urlhttp://127.0.0.1:8000/listings/search被召唤时,Django首先尝试

path('&lt;str:listing_title&gt;', views.listing, name='listing'),

并将“搜索”解释为“列表标题”的值。因为没有名为“搜索”的列表,所以页面返回 404 错误。

将您的 urls.py 更改为

  path('', views.index, name='listings'),
  path('search', views.search, name='search'),
  path('<str:listing_title>', views.listing, name='listing'),

而且您的代码可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    • 2021-08-15
    • 2017-08-18
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多