【问题标题】:How to call a function inside a django html template如何在 django html 模板中调用函数
【发布时间】:2014-10-12 13:02:48
【问题描述】:

我是 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

【问题讨论】:

  • 试过去掉括号吗?
  • 是的,但是什么也没发生
  • 一件奇怪的事情是即使调用 {{Blog.objects.count}} 也不会打印任何内容
  • 视图中有什么服务于这个请求?
  • 你必须创建一个模板标签,或者通过上下文将函数的结果传递给模板。

标签: python django django-models django-templates django-views


【解决方案1】:

您不能将参数传递给这样的可调用属性。要么拉取视图中的值,要么编写自定义模板标签来执行此操作。

【讨论】:

    【解决方案2】:

    要解决第一个问题(blog.blogentry_set() 没有按预期工作”),请删除 .all 后面的括号,例如:

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

    第二个问题(“调用函数我们不需要 (),但是我们如何传递参数?”),@Varnan K 的回答充分解决了这个问题。您可能需要创建一个custom template tag

    【讨论】:

      猜你喜欢
      • 2014-08-18
      • 2023-03-25
      • 1970-01-01
      • 2011-01-08
      • 2011-01-03
      • 2022-11-29
      • 2014-09-01
      • 2011-01-28
      相关资源
      最近更新 更多