发生Django中的NOReverseMatch错误?

2024-06-16 10:57:48 发布

您现在位置:Python中文网/ 问答频道 /正文

enter image description here我是django的新手,通过创建一个房地产网站,通过在线课程学习django项目.In这个项目我有一个listings应用程序,它显示了数据库网页中的一些列表,但我得到了一个错误,反向为'listing',参数'('',)'没有找到。尝试了1个模式:['listings/listings/$'] 我的列表网址.py你知道吗

from django.conf.urls import url

from . import views

urlpatterns = [ 
      url(r'^$', views.index, name='listings'),
      url(r'^listings/<int:listing_id>$', views.listing, name='listing'),
      url('search', views.search,name='search')
] 

我的列表视图.py你知道吗

from django.shortcuts import get_object_or_404, render
from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator

from .models import Listing

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
  }

  return render(request, 'listings/listings.html', context)

def listing(request, listing_id):
  listing = get_object_or_404(Listing, pk=listing_id)

  context = {
    'listing': listing
  }

  return render(request, 'listings/listing.html', context)

def search(request):
  queryset_list = Listing.objects.order_by('-list_date')

  # Keywords
  if 'keywords' in request.GET:
    keywords = request.GET['keywords']
    if keywords:
      queryset_list = queryset_list.filter(description__icontains=keywords)

  # City
  if 'city' in request.GET:
    city = request.GET['city']
    if city:
      queryset_list = queryset_list.filter(city__iexact=city)

  # State
  if 'state' in request.GET:
    state = request.GET['state']
    if state:
      queryset_list = queryset_list.filter(state__iexact=state)

  # Bedrooms
  if 'bedrooms' in request.GET:
    bedrooms = request.GET['bedrooms']
    if bedrooms:
      queryset_list = queryset_list.filter(bedrooms__lte=bedrooms)

  # Price
  if 'price' in request.GET:
    price = request.GET['price']
    if price:
      queryset_list = queryset_list.filter(price__lte=price)

  context = {
    'state_choices': state_choices,
    'bedroom_choices': bedroom_choices,
    'price_choices': price_choices,
    'listings': queryset_list,
    'values': request.GET
  }

  return render(request, 'listings/search.html', context)

我的列表模板

{% extends 'pages/base.html' %}

{% load humanize %}

{% block title %} | Browse Property Listings {% endblock %}

{% block content %}
<section id="showcase-inner" class="py-5 text-white">
    <div class="container">
      <div class="row text-center">
        <div class="col-md-12">
          <h1 class="display-4">Browse Our Properties</h1>
          <p class="lead">Lorem ipsum dolor sit, amet consectetur adipisicing elit. Sunt, pariatur!</p>
        </div>
      </div>
    </div>
  </section>

  <!-- Breadcrumb -->
  <section id="bc" class="mt-3">
    <div class="container">
      <nav aria-label="breadcrumb">
        <ol class="breadcrumb">
          <li class="breadcrumb-item">
            <a href="{% url 'index' %}">
              <i class="fas fa-home"></i> Home</a>
          </li>
          <li class="breadcrumb-item active"> Browse Listings</li>
        </ol>
      </nav>
    </div>
  </section>

  <!-- Listings -->
  <section id="listings" class="py-4">
    <div class="container">
      <div class="row">
        {% if listings %}
          {% for listing in listings %}
          <div class="col-md-6 col-lg-4 mb-4">
              <div class="card listing-preview">
                <img class="card-img-top" src="{{ listing.photo_main.url }}" alt="">
                <div class="card-img-overlay">
                  <h2>
                    <span class="badge badge-secondary text-white">${{ listing.price | intcomma }}</span>
                  </h2>
                </div>
                <div class="card-body">
                  <div class="listing-heading text-center">
                    <h4 class="text-primary">{{ listing.title }}</h4>
                    <p>
                      <i class="fas fa-map-marker text-secondary"></i> {{ listing.city }} {{ listing.state }}, {{ listing.zipcode }}</p>
                  </div>
                  <hr>
                  <div class="row py-2 text-secondary">
                    <div class="col-6">
                      <i class="fas fa-th-large"></i> Sqft: {{ listing.sqft }}</div>
                    <div class="col-6">
                      <i class="fas fa-car"></i> Garage: {{ listing.garage }}</div>
                  </div>
                  <div class="row py-2 text-secondary">
                    <div class="col-6">
                      <i class="fas fa-bed"></i> Bedrooms: {{ listing.bedrooms }}</div>
                    <div class="col-6">
                      <i class="fas fa-bath"></i> Bathrooms: {{ listing.bathrooms }}</div>
                  </div>
                  <hr>
                  <div class="row py-2 text-secondary">
                    <div class="col-12">
                      <i class="fas fa-user"></i> {{ listing.realtor }}</div>
                  </div>
                  <div class="row text-secondary pb-2">
                    <div class="col-6">
                      <i class="fas fa-clock"></i> {{ listing.list_date | timesince }}</div>
                  </div>
                  <hr>
                  <a href="{% url 'listing' listing_id %}" class="btn btn-primary btn-block">More Info</a>
                </div>
              </div>
            </div>
          {% endfor %}
        {% else %}
          <div class="col-md-12">
            <p>No Listings Available</p>
          </div>
        {% endif %}
      </div>

      <div class="row">
        <div class="col-md-12">
          {% if listings.has_other_pages %}
            <ul class="pagination">
              {% if listings.has_previous %}
                <li class="page-item">
                  <a href="?page={{listings.previous_page_number}}" class="page-link">&laquo;</a>
                </li>
              {% else %}
                <li class="page-item disabled">
                  <a class="page-link">&laquo;</a>
                </li>
              {% endif %}
              {% for i in listings.paginator.page_range %}
                {% if listings.number == i %}
                  <li class="page-item active">
                    <a class="page-link">{{i}}</a>
                  </li>
                {% else %}
                  <li class="page-item">
                    <a href="?page={{i}}" class="page-link">{{i}}</a>
                  </li>
                {% endif %}
              {% endfor %}
              {% if listings.has_next %}
                <li class="page-item">
                  <a href="?page={{listings.next_page_number}}" class="page-link">&raquo;</a>
                </li>
              {% else %}
                <li class="page-item disabled">
                  <a class="page-link">&raquo;</a>
                </li>
              {% endif %}
            </ul>
          {% endif %}
        </div>
      </div>
    </div>
  </section>
{% endblock %}

Tags: textdivgetifrequestpagecolli
2条回答

如果您使用的是Django版本2+,则可以使用path

path('listings/<int:listing_id>/', views.listing, name='listing'),

如果您使用的django版本低于2

 url(r'^listings/(?P<listing_id>[0-9]+)/$', views.listing, name='listing'),

现在在模板中

<a href="{% url 'listing' listing.pk %}">

您使用的是django3和django1中的url模式。试试这个:

网址.py

from django.urls import path
from . import views

urlpatterns = [ 
      path('', views.index, name='listings'),
      path('listings/<int:listing_id>', views.listing, name='listing'),
      path('search', views.search, name='search')
]

模板中

<a href="{% url 'listing' listing_id=listing.pk %}" class="btn btn-primary btn-block">More Info</a>

相关问题 更多 >