首页 > 解决方案 > 从 HTML 调用函数到 Python 文件

问题描述

我有一个带有“卡片”列表的 index.html 页面,其中每张卡片都有一个“点击选择”链接。

当用户单击此链接时,我想在 python 中调用一个函数来选择此项目,请参阅:

def selectItem(request, item):
    #so something with this item

所以,在我的 html 页面中:

<div class="card-action">
                            <a href="{{ selectItem(myitem) }}">Selecionar</a>
                        </div>

这行不通。什么是正确的方法?

标签: pythondjango

解决方案


你不能调用这样的函数。浏览器使用 HTTP 请求请求数据,服务器使用 (HTTP) 响应进行响应。这样的请求有一个 URL,Django 可以使用 URL 将请求路由到将计算响应的正确视图。

因此,我们需要构建一个可以调用的视图。您的电话已经很接近了:

# app/views.py

from django.http import HttpResponse

def select_item(request, item_id):
    # so something with this item_id
    # ...
    return HttpResponse()

由于大多数对象是不可序列化的(通常你不希望这样,因为它会向用户公开大量(潜在敏感的)数据,因此我们需要使用一个id(例如存储在数据库中的标识符)对应于一个对象)。

响应包含响应中的数据。通常这是由浏览器呈现的 HTML 代码。

现在urls.py,我们可以指定 url 的样子,例如:

# app/urls.py

from django.urls import path
from app.views import select_item

urlpatterns = [
    path('select_item/<int:item_id>/', select_item, name='select_item_view'),
    # ...
]

urlpatterns需要包含在根目录中urlpatterns(在项目根目录中)。

现在在 HTML 模板中,我们可以生成与该视图匹配的 URL,类似于:

<div class="card-action">
  <a href="{% url 'select_item_view' item_id=myitem.id %}">Selecionar</a>
</div>

然后,Django 将确保href指向的 URL 指向select_item具有正确参数的视图。


推荐阅读