如何在Django HTML模板中调用函数

1 投票
2 回答
5179 浏览
提问于 2025-04-18 17:47

我刚开始学习Django,这个问题比较基础。我查了一些谷歌的链接和文档,但似乎还是没能解决。

简单来说:

我需要在HTML文件中访问某个博客的文章,但我发现blog.blogentry_set()似乎没有按预期工作。有人能帮帮我吗?这是我尝试的代码:

models.py文件:

class Blog(models.Model):
   subject = models.CharField(max_length = 20)
   ...

class BlogEntry(models.Model):
   ref = models.ForeignKey(Blog)
   ...

index.html文件:

{% for blog in blogs %}
    <p>{{ blog.subject}}</p>
    <div>
      <p>{{blog.date}}</p>
      {% for entry in blog.blogentry_set.all() %}
          {{entry.text}}
      {% endfor %}
    </div>
{% endfor %}

我试着去掉了(),这样确实消除了错误信息,但文章的内容还是没有按预期显示出来,所以又出现了问题。

我听说在模板语言中,调用函数时不需要加(),那我们该怎么传递参数呢?

另外,我在想:我需要在这里“加载”某个文件吗?请帮帮我 :D

2 个回答

0

针对第一个问题("blog.blogentry_set() 没有按预期工作"),你需要去掉 .all 后面的括号,像这样:

{% for entry in blog.blogentry_set.all %}
    {{entry.text}}
{% endfor %}

第二个问题("调用函数时我们不需要括号,但那我们怎么传递参数呢?")已经在 @Varnan K 的回答中详细解释了。你可能需要创建一个 自定义模板标签

6

你不能像这样给可调用的属性传递参数。要么在视图中获取这个值,要么写一个自定义的模板标签来处理这个事情。

撰写回答