Django 中的按键错误
KeyError in Django
我正在创建一个 fiverr.com 的克隆作为一个项目。
我的 base.html 中有一个带有类别标题的 header,如果我单击它,应该只会过滤出相关类别中的演出以供显示。
无论如何,它总是重定向到主页。我做了一些测试,相信这应该是因为 KeyError
,并且没有 link 被正确传递给函数。
代码如下:
views.py
def category(request, link):
categories = {
"Graphics & Design": "GD",
"Digital & Marketing": "DM",
"Video & Animation": "VA",
"Music & Audio": "MA",
"Programming & Tech": "PT"
}
try:
gigs = Gig.objects.filter(category=categories[link])
return render(request, 'home.html', {"gigs": gigs})
except KeyError:
return redirect('home')
models.py
class Gig(models.Model):
CATEGORY_CHOICES = (
("GD", "Graphics & Design"),
("DM", "Digital & Marketing"),
("VA", "Video & Animation"),
("MA", "Music & Audio"),
("PT", "Programming & Tech")
)
title = models.CharField(max_length=500)
category = models.CharField(max_length = 2, choices=CATEGORY_CHOICES)
description = models.CharField(max_length=1000)
price = models.IntegerField(default=6)
photo = models.FileField(upload_to='gigs')
status = models.BooleanField(default=True)
user = models.ForeignKey(User)
create_time = models.DateTimeField(default=timezone.now)
def get_absolute_url(self):
return reverse('my_gigs')
def __str__(self):
return self.title
base.html(link 所在的位置 - 尝试了另一种方法来获得与图形和设计相同的 link,但结果相似)
<nav class="navbar navbar-light bg-faded">
<div class="container">
<ul class="nav navbar-nav">
<li class="nav-item active">
<a class="nav-link" href='category/graphics-design'>Graphics & Design <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'category' 'digital-marketing' %}">Digital Marketing</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'category' 'video-animation' %}">Video & Animation</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'category' 'music-audio' %}">Music & Audio</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'category' 'programming-tech' %}">Programming & Tech</a>
</li>
</ul>
</div>
</nav>
urls.py
url(r'^category/(?P<link>[\w|-]+)/$', views.category, name='category'),
视图正在 link
参数中接收 slug 值 。所以,你应该重新定义 categories
字典:
def category(request, link):
categories = {
"graphics-design": "GD",
"digital-marketing": "DM",
"video-animation": "VA",
"music-audio": "MA",
"programming-tech": "PT"
}
...
您输入的 URL 是什么?一定是因为 'link' 参数没有从您的 'categories' 字典中找到任何键。
类似这样的东西(在你的 python 命令行上试试):
>>> x = {'name': 'dean'}
>>> x['xx']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'xx'
>>>
顺便给你一个建议,当你试图抓住的时候。使用此语法查看错误
import sys
try:
# Code here
except:
# Prints the error and the line that causes the error
print ("%s - %s at line: %s" % (sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2].tb_lineno))
我正在创建一个 fiverr.com 的克隆作为一个项目。
我的 base.html 中有一个带有类别标题的 header,如果我单击它,应该只会过滤出相关类别中的演出以供显示。
无论如何,它总是重定向到主页。我做了一些测试,相信这应该是因为 KeyError
,并且没有 link 被正确传递给函数。
代码如下:
views.py
def category(request, link):
categories = {
"Graphics & Design": "GD",
"Digital & Marketing": "DM",
"Video & Animation": "VA",
"Music & Audio": "MA",
"Programming & Tech": "PT"
}
try:
gigs = Gig.objects.filter(category=categories[link])
return render(request, 'home.html', {"gigs": gigs})
except KeyError:
return redirect('home')
models.py
class Gig(models.Model):
CATEGORY_CHOICES = (
("GD", "Graphics & Design"),
("DM", "Digital & Marketing"),
("VA", "Video & Animation"),
("MA", "Music & Audio"),
("PT", "Programming & Tech")
)
title = models.CharField(max_length=500)
category = models.CharField(max_length = 2, choices=CATEGORY_CHOICES)
description = models.CharField(max_length=1000)
price = models.IntegerField(default=6)
photo = models.FileField(upload_to='gigs')
status = models.BooleanField(default=True)
user = models.ForeignKey(User)
create_time = models.DateTimeField(default=timezone.now)
def get_absolute_url(self):
return reverse('my_gigs')
def __str__(self):
return self.title
base.html(link 所在的位置 - 尝试了另一种方法来获得与图形和设计相同的 link,但结果相似)
<nav class="navbar navbar-light bg-faded">
<div class="container">
<ul class="nav navbar-nav">
<li class="nav-item active">
<a class="nav-link" href='category/graphics-design'>Graphics & Design <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'category' 'digital-marketing' %}">Digital Marketing</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'category' 'video-animation' %}">Video & Animation</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'category' 'music-audio' %}">Music & Audio</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'category' 'programming-tech' %}">Programming & Tech</a>
</li>
</ul>
</div>
</nav>
urls.py
url(r'^category/(?P<link>[\w|-]+)/$', views.category, name='category'),
视图正在 link
参数中接收 slug 值 。所以,你应该重新定义 categories
字典:
def category(request, link):
categories = {
"graphics-design": "GD",
"digital-marketing": "DM",
"video-animation": "VA",
"music-audio": "MA",
"programming-tech": "PT"
}
...
您输入的 URL 是什么?一定是因为 'link' 参数没有从您的 'categories' 字典中找到任何键。
类似这样的东西(在你的 python 命令行上试试):
>>> x = {'name': 'dean'}
>>> x['xx']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'xx'
>>>
顺便给你一个建议,当你试图抓住的时候。使用此语法查看错误
import sys
try:
# Code here
except:
# Prints the error and the line that causes the error
print ("%s - %s at line: %s" % (sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2].tb_lineno))