django 无法解析其余部分:“{%get(性别=”F“)%}.全名”来自“x.parent.{%get(性别=”F“)%}.全名”

ycl3bljg  于 2023-01-14  发布在  Go
关注(0)|答案(2)|浏览(63)

我有一个问题,获得一个数据在模板中。我正在写代码在python文件它的工作。

students = Student.objects.all()
  for x in students:
    print(x.parent.get(gender='M').fullname)

它让我Parent Fullname,但当我写在模板,如:

{% for x in students %}
  <td class="small d-none d-xl-table-cell  text-center">{{ x.parent.{%get(gender='F')%}.fullname }}</td>
{% endfor %}

它给了我Could not parse the remainder: '{%get(gender='F')%}.fullname' from 'x.parent.{%get(gender='F')%}.fullname'错误。我试着像{{ x.parent.get(gender='F').fullname }}一样写它,但是我得到了同样的错误
相同的代码在python文件中工作,但在模板中不工作。

i2loujxw

i2loujxw1#

你不能这么做:Django的模板语言是 * 故意 * 限制的,以防止人们在模板中编写业务逻辑。
您可以在Student模型中进行定义:

class Student(models.Model):
    # …

    @property
    def mother(self):
        return self.parent.get(gender='F')

    @property
    def father(self):
        return self.parent.get(gender='M')

然后使用:

{{ x**.mother** }}

模板中。

    • 注意**:related_name=…[Django-doc]是反向获取相关对象的管理器的名称。因此通常ForeignKeyManyToManyFieldrelated_name是 * 复数 *,例如parents而不是parent
au9on6nz

au9on6nz2#

您不能在{{ }}括号内包含{% %}括号。您不能简单地在模板内使用所有Python逻辑。模板引擎只能处理一些简单的事情。对于更复杂的逻辑,您可以使用自定义标记,但首先要阅读:Django DOCS

相关问题