【问题标题】:Model name is being displayed in Django template模型名称显示在 Django 模板中
【发布时间】:2014-03-10 05:04:52
【问题描述】:

我是 Django 新手,所以我只是构建了一些简单的应用程序来增加我的知识。我正在尝试显示串联列表,但是当我显示列表时,它会显示模型名称,如下所示:

[<FamousQuote: Be yourself; everyone else is already taken>][<InfamousQuote: . I dunno. Either way. >]

这是我的views.py文件:

def index(request):
    famous_quote = FamousQuote.objects.all().order_by('?')[:1]
    infamous_quote = InfamousQuote.objects.all().order_by('?')[:1]

    compiled = [famous_quote, infamous_quote]

    return render(request, 'funnyquotes/index.html', {'compiled': compiled})

还有我的 index.html 文件:

{% if compiled %}
    {{ compiled|join:"" }}
{% else %}
    <p>No quotes for you.</p>
{% endif %}

我做错了什么,还是有更好的方法可以做到这一点?

【问题讨论】:

  • 你想要的结果是什么?
  • 能否请您发布您的models.py 文件?

标签: python django


【解决方案1】:

您有一个列表列表,因此该列表的 unicode 表示包含 &lt;ObjectName:string&gt;,如果您有一个模型对象列表,您将获得对象的正确 __unicode__ 表示。

最终,模板会自动尝试将 python 对象转换为其字符串表示形式,在 QuerySet 的情况下是 [&lt;object: instance.__unicode__()&gt;]

您已经清楚地为对象实例定义了您的所需的字符串表示 - 您只需要确保模板引擎接收这些实例 - 而不是其他类。

查看shell中输出的差异。

print(FamousQuote.objects.all().order_by('?')[:1])   # calls str(QuerySet)
# vs
print(FamousQuote.objects.order_by('?')[0]) # calls str(FamousQuote)

要么更新你的观点

compiled = [famous_quote[0], infamous_quote[0]]

或者你的模板

{% for quotes in compiled %}{{ quotes|join:"" }}{% endfor %}

TL;DR

你有列表的列表,所以你加入的是列表的字符串表示,而不是实例。

【讨论】:

    猜你喜欢
    • 2012-04-08
    • 1970-01-01
    • 2017-11-13
    • 2018-06-19
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 2022-06-12
    • 2017-02-15
    相关资源
    最近更新 更多