Django在几行之后不会呈现变量

时间:2017-05-19 00:03:08

标签: python django django-templates jinja2 render

我只是不明白。不知怎的,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-snipped:

{% 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

也许是因为公司和关注领域是ForeignKeys,但这很奇怪。

提前致谢!

1 个答案:

答案 0 :(得分:0)

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>