【问题标题】:Trying to send parameters尝试发送参数
【发布时间】:2014-12-08 03:52:20
【问题描述】:

我正在尝试获取我的 shop.html 页面中的某些产品的专用 URL。我有五个我命名为“卡片”的产品:(Ysera、Neltharion、Nozdormu、Alexstrasza、Malygos)。每张卡片都应该有一个专用的 url(localhost:8000/card/1/、localhost:8000/card/2/ 等)。但是 django 并没有获取该 url,而是向我发送了该消息:

DoesNotExist at /card/1/ 卡片匹配查询不存在

我在views.py中正确导入了类模型“card”,实际上我只是在过滤函数中使用card来获取shop.html中的所有产品。请看我的views.py:

from django.shortcuts import render_to_response
from django.template import RequestContext
from dracoin.apps.synopticup.models import card
from dracoin.apps.home.forms import ContactForm,LoginForm
from django.core.mail import EmailMultiAlternatives

from django.contrib.auth import login,logout,authenticate
from django.http import HttpResponseRedirect    



def index(request):
    return render_to_response('home/index.html',context_instance=RequestContext(request))

def landing(request):
    return render_to_response('home/landing.html',context_instance=RequestContext(request))

def shop(request):
    tarj = card.objects.filter(status=True)
    ctx = {'tarjetas':tarj}
    return render_to_response('home/shop.html',ctx,context_instance=RequestContext(request))

def singleCard(request,id_tarj):    
    tarj = card.objects.get(id=id_tarj) 
    ctx = {'card':tarj}
    return render_to_response('home/singleCard.html',ctx,context_instance=RequestContext(request))

这里是我的 urls.py:

url(r'^card/(?P<id_tarj>.*)/$','dracoin.apps.home.views.singleCard',name='vista_single_card'),

我的导入模型:

class card(models.Model):
    nombre = models.CharField(max_length=100)
    descripcion = models.TextField(max_length=300)
    status = models.BooleanField(default=True)

    def __unicode__(self):
        return self.nombre

我的 singleCard.html:

{% extends 'base.html' %}
{% block title %} Tarjeta {{card.nombre}} {% endblock %}
{% block content %}

<h1>{{ card.nombre }}</h1><br> 
<p> {{ card.descripcion }}</p>        

{% endblock %}

我不知道我对“卡片”类的引用是否有误。但我尝试在这个论坛中应用其他答案。例如:

In Django, how do I objects.get, but return None when nothing is found?

matching query does not exist Error in Django

Django error - matching query does not exist

我不知道我在应用这些解决方案时是否犯了错误。包括我尝试:

tarj = card.objects.filter(id=id_tarj)

使用这个我获得了我网站的空白页面...

如果我忽略了某些问题,请提前向我道歉。

谢谢!!


回答 wolendranh 我有一个应用程序的 urls.py 和主要的 urls.py。

最近我在身边学习 django,我不明白在这种情况下如何定义自己的一致标识符。

如果它仍然有用,我在这里放一个错误生成的回溯:

Environment:


Request Method: GET
Request URL: http://localhost:8000/card/1/

Django Version: 1.7
Python Version: 2.7.6
Installed Applications:
('django.contrib.admin',
 'django.contrib.admindocs',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'dracoin.apps.synopticup',
 'dracoin.apps.home')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware')


Traceback:
File "/home/draicore/project/multilevel/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  111.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/draicore/project/dracoin/dracoin/apps/home/views.py" in singleCard
  24.       tarj = card.objects.get(id=id_tarj) 
File "/home/draicore/project/multilevel/local/lib/python2.7/site-packages/django/db/models/manager.py" in manager_method
  92.                 return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/draicore/project/multilevel/local/lib/python2.7/site-packages/django/db/models/query.py" in get
  357.                 self.model._meta.object_name)

Exception Type: DoesNotExist at /card/1/
Exception Value: card matching query does not exist.

请原谅我延长这个问题。

【问题讨论】:

  • 这意味着您的数据库中没有 ID 为 1 的卡片对象。打开一个shell,看看数据库中对象的有效ID是什么
  • 也尝试设置错误以显示在您的网络服务器上,对您有很大帮助 - 或者检查 apache?错误日志

标签: django django-models django-views django-template-filters


【解决方案1】:

正如 karthikr 在评论中所说,您没有 id=1 的卡。

这可能是因为您之前删除并重新创建了一张卡片。 id 是一个自动增量字段,这意味着数据库不会重用已删除的 ID。如果您希望您的项目具有始终可用于在 URL 中查询它的一致标识符,您可能应该将其定义为显式 IntegerField(使用除 id 之外的其他名称),并对其进行查询。更好的是,使用 slug 而不是数字 ID。

【讨论】:

    【解决方案2】:

    我有几件事要澄清: 1. 你的项目中有一个 urls.py 文件吗?或为每个应用分开。 如果您有一个单独的“your_project/card/urls”,并且它包含在主 urls.py 中,则不应在您的 url 中使用“card/”。因为 Django 已经知道该请求是针对该应用程序的。

    r'^card/(?P<id_tarj>.*)/$' -> r'^(?P<id_tarj>.*)/$'
    
    1. 如果它在主 urls.py 中尝试替换:

      r'^card/(?P<id_tarj>.*)/$' 
      

      r'^card/(?P\d+))/$'

    P.s.:我对cmets没有足够的声誉,所以我添加了一个答案。对不起。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      • 2013-05-30
      • 1970-01-01
      • 1970-01-01
      • 2020-07-02
      • 1970-01-01
      相关资源
      最近更新 更多