Django视图/模板中的DoesNotExist错误与一对一字段
我有这些模型。
class Storypak(models.Model):
headline = models.CharField('Headline', max_length=200)
pub_date = models.DateField(blank=True)
class Story(models.Model):
storypak = models.OneToOneField('Storypak', blank=True, null=True)
copy = models.TextField(blank=True)
还有这个视图。
def pak_detail(request, pak_id, year, month, day):
pak = Storypak.objects.get(pk=pak_id)
t = loader.get_template('storypak_detail.html')
c = Context ({
'pak' : pak,
})
return HttpResponse(t.render(c))
当我在我的模板中使用if
语句时,出现了DoesNotExist
错误。根据我找到的文档,这种错误应该是被忽略的。难道if pak.story
不应该返回False
而不是抛出错误吗?我是不是漏掉了什么?我觉得这可能和一对一的关系有关,但我在文档中找不到具体的说明。
这是我记得的相关模板代码。我在这台电脑上没有文件。如果不正确,我会稍后修复,如果有需要的话,可能还会发布调试信息。
{% if pak.story %}
<p>{{ pak.story.copy }}</p>
{% endif %}
2 个回答
0
你提供的信息不够详细,所以很难找到问题的根源。不过,这个简单的错误信息只能由你视图中的一个语句引发,也就是...
pak = Storypak.objects.get(pk=pak_id)
pak_id可能无效,或者你的模型有问题,导致找不到这个id对应的Storypak。这个调用是唯一会引发DoesNotExist错误的地方。你可以在这一行之前加上raise Exception(str(pak_id))
,这样可以查看它试图“获取”的内容,确认一下这个记录在storypak表中是否存在。
0
这里有一个相关的bug:https://code.djangoproject.com/ticket/10227
这是if
标签的源代码:https://code.djangoproject.com/browser/django/trunk/django/template/defaulttags.py#L267
你可以看到,这个标签的render
方法只捕捉到VariableDoesNotExist
这个错误。