在 Django 模板中使用外键作为变量
Posted
技术标签:
【中文标题】在 Django 模板中使用外键作为变量【英文标题】:Use foreign key as variable in Django template 【发布时间】:2016-04-05 07:13:50 【问题描述】:我是 Django 和 Python 的新手(甚至是编程新手),现在正在创建我的第一个应用程序。我有一个包含外键的模型,它是多对一的关系(一行可以包含许多文章,但每篇文章只与一行相关)。在我的模板中,我想连接多个值来为图像源创建一个 url。
models.py中的相关信息:
class Article(models.Model):
line = models.ForeignKey(Line, null=True)
article = models.CharField(max_length=128)
slug = models.SlugField(null=True)
class Line(models.Model):
line = models.CharField(max_length=128, unique=True)
相关视图将Article.objects.get(slug=article_slug)
作为article
in context_dict
发送到模板。在我的模板中,我包含以下内容并正确返回预期值: article.article
和 article.line
。如果我连接 article.article
的值,它会返回预期值:
% with article.article as a %
这里 a
显示了article.article 的值。但是,当我尝试连接 article.line
的值时,我没有得到任何值。
% with article.line as l %
l
不返回任何内容。我认为这是因为外键也可以解释为一对多,因此我尝试指定哪个值(我还使用了诸如 article.line.all.0
之类的变体)。
% with article.line_set|first as l %
这里 l
也不返回任何内容。
为什么我可以在模板中将article.line
的值作为文本返回,但我不能将它包含在串联中?
【问题讨论】:
【参考方案1】:article.line_set
不是打印相关Line
对象的正确方法,因为它们之间没有这种关系。
至于问题,很有可能是
article.line
是 None
,我认为 Django 模板引擎在尝试访问为空的 article.line
实例的 .line
属性时会默默地抑制可能的 Models.DoesNotExist
异常。
确保article.line
不是None
,以便您可以按如下方式打印出它的文本表示:
% with article.line.line as l %
【讨论】:
谢谢:article.line.line
是解决方案!至于数据库设计,我不确定您的建议是否正确:在我的数据库中,我可以有文章 A 属于 X 行,文章 B 也属于 X 行,A 和 B 不能属于任何其他行。继续,文章 K、L 和 M 可以属于 Y 行,但不能属于任何其他行。以上是关于在 Django 模板中使用外键作为变量的主要内容,如果未能解决你的问题,请参考以下文章
为啥我不能将用户定义的设置作为变量包含在 Django 模板中?