【问题标题】:Django doesn't render variable after a few lines几行后Django不渲染变量
【发布时间】:2017-10-18 23:03:17
【问题描述】:

我只是不明白。不知何故,django 不想渲染两个变量 brand_company 和 brand_concern,即使 django 之前做了 2 行。

这是我在views.py中的定义:

def BrandDetails(request, brand_id):
    brand = Brands.objects.get(id=brand_id)
    brand_name = brand.name
    brand_pic = brand.img
    brand_concern = Concerns.objects.get(id=brand.concern_id).name
    brand_company = Companies.objects.filter(id=brand.company_id)
    brand_fair = brand.fair
    brand_eco = brand.eco

    context = {
        "brand_id": brand.id,
        "brand_name": brand.name,
        "brand_pic": brand.img,
        "brand_company": brand_company,
        "brand_concern": brand_concern,
        "brand_fair": brand_fair,
        "brand_eco": brand_eco,
    }

    return render_to_response("database/details.html", context)

这是我的 html 片段:

{% extends "database/index.html" %}

{% block details %}
  <div id="DetailsContent">
    <img src="{{brand_pic}}"></img><br>
    Markenname: {{ brand_name }}<br>
    Unternehmen: {{ brand_company }}<br>
    Konzern: {{ brand_concern }}<br>
    Fair: {% if brand_fair > 0 %}Ja{% endif %}Nein<br>
    Öklogisch: {% if brand_eco > 0 %}Ja{% endif %}Nein<br>
    <h3><a href="http://localhost:8000/database/"> Neue Suche? Einfach hier klicken </a></h3>
  </div>
{% endblock %}

结果如下:

I market the two empty places

我在 manage.py shell 中测试了查询,它运行良好。您还可以看到brand.name 和brand.img 以及brand.fair 和brand.eco 都显示了(即使if 语句不起作用,但这是另一个问题,但是会显示)。

也许模型也有帮助,这是品牌的模型:

class Brands(models.Model):
    name = models.CharField(max_length=50, null=True)
    altName = models.CharField(max_length=50, null=True)
    fair = models.IntegerField()
    eco = models.IntegerField()
    concern = models.ForeignKey("Concerns", null=True)
    company = models.ForeignKey("Companies", null=True)
    url = models.CharField(max_length=50, null=True)
    img = models.CharField(max_length=50, null=True)

    class Meta:
        db_table = "Brands"

    def __str__(self):
        return self.name

也许是因为 Company 和 Concern 字段是 ForeignKeys,但这会很奇怪。

提前致谢!

【问题讨论】:

  • 我不相信img 通常有一个封闭的标签。你可以改用&lt;img src="{{ brand_pic}}" &gt; 然后试试吗?
  • @MattCremeens - 感谢您的评论。它没有解决我的问题,但我还是改变了它,因为你是对的,封闭标签是不必要的。

标签: python django django-templates jinja2 render


【解决方案1】:

brand_company 没有显示在模板中的原因是,

brand_company = Companies.objects.filter(id=brand.company.pk)

brand_company 是一个查询集。

所以你需要在你的模板中这样做,

Unternehmen: {% for company in brand_company %} {{ company }}{% endfor %}<br>

另外,改变这一行,

brand_concern = Concerns.objects.get(id=brand.concern.pk).name

为什么你的 if 语句不起作用:

因为,您在 else 语句之前结束了 if 语句。

应该是这样的,

{% if brand_eco > 0 %}Ja{% else %}Nein{% endif %}<br>

【讨论】:

  • 是的 .. 怎么样? @安东尼
  • 嘿@Fazil Zaid,感谢您的回答。首先,我想问一下,为什么将.get(id=brand.concern_id) 改为.get(id=brand.concern.pk)。使用pk而不是id更常见吗?关于 if 语句,它就像在 python 代码中一样,您也不需要编写“else”-关键字。但即使我按照你的说法更正了我的代码,它仍然总是假装一切都是 0,所以它总是返回“Nein”。但正如我所说,那是另一个问题。我稍后会解决它。
  • 为什么将 .get(id=brand.concern_id) 更改为 .get(id=brand.concern.pk)。使用pk而不是id更常见吗? => 我更改了它,因为 brand 对象没有名称为 concern_id 的字段,但它有一个字段 concern 并且它有一个 id,所以应该写 brand.concern.pkbrand.concern.id。此外,您没有明确指定主键.. 所以关注.pk 会自动获取 id
  • 您对答案满意吗?
  • ? 对不起!好点子。好的,现在我尝试了这个:brand_concern = Concerns.objects.get(id=brand.concern.pk).name 这也不起作用。 ? 很奇怪。看起来我在上下文字典中输入了什么并不重要,它只是不会将信息传输到应该呈现的页面中。也不会显示brand_fair 和brand_eco。当我删除 if 语句时,它应该只显示 0 或 1,但它什么也不显示。这里真的很奇怪。今晚我会更新我的问题,因为知道我需要在接下来的 9 小时内上班。
猜你喜欢
  • 2016-05-22
  • 1970-01-01
  • 1970-01-01
  • 2015-09-15
  • 1970-01-01
  • 2018-06-23
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
相关资源
最近更新 更多