【问题标题】:Object matching query does not exist对象匹配查询不存在
【发布时间】:2012-07-17 09:45:35
【问题描述】:

我有一个问题:

DoesNotExist at /products//

Product matching query does not exist.

Request Method: GET

Django Version: 1.4
Exception Type: DoesNotExist
Exception Value:

Product matching query does not exist.

Exception Location: /Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/db/models/query.py in get, line 366
Python Executable: /usr/bin/python
Python Version: 2.7.1 

vews.py

def SpecificProduct(request, productslug):
    product = Product.objects.get(slug=productslug)
    context = {'product': product}
    return render_to_response('singleproduct.html',
                           context, context_instance=RequestContext(request))

singleproduct.html

{% extends "base.html" %}

{% block content %}
<div id = "singleproduct">
        <p>Name: {{ product }}</p>
        <p>Description: {{ product.en_description }}</p>
        <p>Description: {{ product.sp_description }}</p>

</div>
{% endblock %}

url.py

(r'^products/(?P<productslug>.*)/$', 'zakai.views.SpecificProduct'),

模型.py

class Product(models.Model):
    en_name = models.CharField(max_length=100)
    sp_name = models.CharField(max_length=100)
    slug = models.SlugField(max_length=80)
    en_description = models.TextField(blank=True, help_text="Describe product in english")
    sp_description = models.TextField(blank=True, help_text="Describe product in spanish")
    photo = ThumbnailerImageField(upload_to="product_pic", blank=True)

    def __unicode__(self):
        return self.en_name    

【问题讨论】:

    标签: django django-views django-urls


    【解决方案1】:

    您正在访问 URL /products//,因此 URL 中的参数 productslug 没有值。这意味着您的 Product 查询失败:

    product = Product.objects.get(slug=productslug)
    

    因为它没有(正确的)productslug 值。要修复它,请将您的 URL 模式更改为:

    (r'^products/(?P<productslug>.+)/$', 'zakai.views.SpecificProduct'),
    

    productslug 参数至少需要一个字符。为了进一步改进它,您可以使用以下正则表达式,它只接受 - 和字符(这是 slug 的组成部分):

    (r'^products/(?P<productslug>[-\w]+)/$', 'zakai.views.SpecificProduct'),
    

    【讨论】:

    • 当我将 URL 更改为 (r'^products/(?P[-\w]+)/$', 'zakai.views.SpecificProduct') 时,我找不到页面(404) 请求方法:GET 请求 URL:127.0.0.1:8000/products/ 使用 zakailtd.urls 中定义的 URLconf,Django 按以下顺序尝试了这些 URL 模式:^$ ^products/$ ^products/(?P[-\ w]+)/$ ^admin/ 当前的 URL,products//,与这些都不匹配。
    • @wadadaaa:那是因为 URL products// 中没有 slug。通过添加一个 slug 来修复该 URL,然后看看会发生什么。
    • 我也不能自动完成一个 slug。这可能导致?
    • @wadadaaa:我不知道你在暗示什么:如果你有一个带有 slug 的 Product 对象,那么你应该能够将 slug 填充到 URL 中。
    猜你喜欢
    • 2013-07-27
    • 2014-04-06
    • 1970-01-01
    • 2011-09-26
    • 2016-01-12
    • 2012-05-10
    • 2013-03-02
    • 2021-12-10
    • 2021-05-07
    相关资源
    最近更新 更多