在Django模板中使用外键作为变量

时间:2015-12-31 09:39:36

标签: python django django-templates

我是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中的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 个答案:

答案 0 :(得分:1)

article.line_set不是打印相关Line个对象的正确方法,因为它们之间没有这样的关系。

至于问题,很有可能 article.lineNone,我认为当尝试访问Models.DoesNotExist实例的.line属性时,Django模板引擎会静默地抑制可能的article.line异常。< / p>

确保article.line不是None,以便您可以按如下方式打印出来的文字表示:

{% with article.line.line as l %}