如何将 "python functions" 放入 Django 项目中的 HTML 文件

How to put "python functions" into HTML files in a Django Project

在 Django 项目中工作。我有一个 index.html 文件,其中包含一个名为 "todas_academias" 的变量,它是我创建的模型列表 类。 目录:FKSC/ac_filiados/templates/ac_filiados/index.html

{% for academia in ordenar(todas_academias) %}
                 <td>{{ academia.nome_academia }}</td>
                 <td>{{ academia.estado }}</td>
                 <td>{{ academia.cidade }}</td>
                 <td>{{ academia.professor }}</td>
                 <td>{{ academia.num_alvara }}</td>
{% endfor %}

我在另一个目录的 python 文件中创建了一个名为 "ordenar" 的函数。 目录:FKSC/ac_filiados/functions.py

不需要了解此函数的作用。

def ordenar(todas_academias):
    lista = []
    for academia in todas_academias:
        lista = lista + [academia.num_alvara]
    nova_list = lista.sort()
    nova_lista_academias = []
    for reg in nova_list:
        for academia in todas_academias:
            if reg == academia.num_alvara:
                nova_lista_academias = nova_lista_academias + [academia]
    return nova_lista_academias 

现在,我只想使用 index.html 文件中的 "ordenar()" 函数,正如我尝试使用的那样,但它没有用。 1)使用前需要导入"ordenar"函数吗?如果是这样,我该如何导入它? 2) 我应该把 "ordenar" 函数放在 views.py 中吗? 3) 或者,是否有在 HTML 文件中使用此类函数的特定方法?

您可以在视图的上下文中添加函数的结果或创建 django 模板标签 inclusion-tags doc and example: custom-inclusion-tags

您不应该从模板中调用函数。我会像这样通过上下文字典将 ordenar returns 传递给视图:

views.py

def ordenar(todas_academias):
    lista = []
    for academia in todas_academias:
        lista = lista + [academia.num_alvara]
    nova_list = lista.sort()
    nova_lista_academias = []
    for reg in nova_list:
        for academia in todas_academias:
            if reg == academia.num_alvara:
                nova_lista_academias = nova_lista_academias + [academia]
    return nova_lista_academias 

def some_view(request):
    ...
    YOUR OTHER CODE
    ...
    return render(request, 'yourtemplate.html', {ordenar: 'ordenar'})

然后在您的模板中,您或多或少会保留相同的代码:

{% for academia in ordenar %}
    <td>{{ academia.nome_academia }}</td>
    <td>{{ academia.estado }}</td>
    <td>{{ academia.cidade }}</td>
    <td>{{ academia.professor }}</td>
    <td>{{ academia.num_alvara }}</td>
{% endfor %}