我试图获取我在shop.html页面中的某些产品的专用网址。我有五个产品,我命名为"卡":(Ysera,Neltharion,Nozdormu,Alexstrasza,Malygos)。每张卡都应该有一个专用网址(localhost:8000 / card / 1 /,localhost:8000 / card / 2 /等)。但是没有获得那个网址,django向我发送了这条消息:
/ card / 1 /卡匹配查询中的DoesNotExist不存在。
我正确导入了班级模型" card"在我的views.py中,实际上我正在使用过滤功能中的卡来获取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 %}
我不知道我是否有错误的推荐&#34;卡&#34;类。但我尝试在这个论坛中应用其他答案。例如:
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由app和主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.
请原谅我延长这个问题。
答案 0 :(得分:0)
我有几点需要澄清: 1.您的项目中是否有一个urls.py文件?或为每个应用分开。 如果你有一个单独的&#34; your_project / card / urls&#34;它包含在主urls.py中你不应该使用&#34; card /&#34;在你的网址中。因为Django已经知道该请求是针对该应用程序的。
r'^card/(?P<id_tarj>.*)/$' -> r'^(?P<id_tarj>.*)/$'
如果它在主urls.py中尝试替换:
r'^card/(?P<id_tarj>.*)/$'
到
R&#39; ^卡/(P \ d +?))/ $&#39;
P.s。:我没有充分的评论声誉,所以我添加了一个答案。遗憾。
答案 1 :(得分:0)
正如karthikr在评论中所说,你没有id = 1的卡片。
这可能是因为您之前删除并重新创建了一张卡片。 id是自动增量字段,这意味着数据库不会重用已删除的ID。如果您希望您的项目具有一致的标识符,您可以始终使用该标识符在URL中查询它,则应该将其定义为显式的IntegerField(使用除id
之外的其他名称),然后对其进行查询。更好的是,使用slug而不是数字ID。