【问题标题】:NoReverseMatch at / Django 1.10NoReverseMatch at / Django 1.10
【发布时间】:2017-08-19 14:34:46
【问题描述】:

我正在使用 Django 1.10 并收到此错误:

NoReverseMatch 在 / 未找到带有参数“()”和关键字参数“{'pk':1}”的“views.product_detail”的反向。尝试了 0 个模式:[]

这是我的 index.html 模板:

{% for pr in product %}
                <li>
                    {{ pr.pk }}
                    <a href="{% url 'views.product_detail' pk=pr.pk %}">
                        {{ pr.name }}
                    </a>
                    || {{ pr.description }} || <img src="{{ pr.image.url }}">
                </li>
{% endfor %}

我的主要项目 urls.py 是:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', include('products.urls') ),
] + static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)

我的应用程序 urls.py 是:

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

urlpatterns = [
    url(r'^$', views.hello_world, name='hello'),
    url(r'^product/(?P<pk>[0-9]+)/$', views.product_detail,name='product_detail'),
]

我的views.py是:

from django.http import HttpResponse, HttpResponseRedirect
from django.template import loader
from django.shortcuts import render, get_object_or_404
from .models import Product

# Create your views here.
def hello_world(request):
    product = Product.objects.order_by('id')
    template = loader.get_template('index.html')
    context = {
        'product': product
    }
    return HttpResponse(template.render(context, request))

def product_detail(request, pk):
    product = get_object_or_404(Product, pk=pk)
    template = loader.get_template('product_detail.html')
    context = {
        'product': product
    }
    return HttpResponse(template.render(context, request))

错误信息是: Error message

感谢您的帮助!!!

【问题讨论】:

标签: python django


【解决方案1】:

NoReverseMatch 表示 Django 没有将您请求的 URL 与您在 urls.py 中的任何 URL 匹配。

看起来r'^$' 找不到任何内容,因为该模式没有空间包含任何文本。在您的项目 url 中将 r'^$' 更改为 r''r'^products/'。这样,您的网址将如下所示:

'/products/product/1/' # For product_detail
'/products/' # For views.hello_world

【讨论】:

  • 嗨 Kris,我将 r'^$' 更改为 r'^/$' 现在消息是 找不到页面 (404) 请求方法:GET 请求 URL:localhost:8000 使用Shoppy.urls 中定义的 URLconf,Django 尝试了这些 URL 模式,顺序如下: ^admin/ ^/$ [name='hello'] products/(?P[0-9]+)/$ [name ='product_detail'] ^media\/(?P.*)$ 当前 URL 与其中任何一个都不匹配。感谢您的帮助
【解决方案2】:

问题在于您如何包含产品 URL。您已经使用$ 终止了包含模式,因此之后的任何内容都不会匹配。包含时,切勿使用 $。

url(r'', include('products.urls') ),

【讨论】:

    猜你喜欢
    • 2017-07-30
    • 2020-06-01
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 1970-01-01
    相关资源
    最近更新 更多