【问题标题】:Use foreign key as variable in Django template在 Django 模板中使用外键作为变量
【发布时间】: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 的值作为文本返回,但我不能将它包含在串联中?

【问题讨论】:

    标签: python django django-templates


    【解决方案1】:

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

    至于问题,很有可能是 article.lineNone,我认为 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 行,但不能属于任何其他行。
    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 2022-06-25
    • 1970-01-01
    • 2011-11-25
    • 2012-11-06
    • 2012-07-22
    • 2012-11-02
    相关资源
    最近更新 更多