我有一个index.html页面,其中包含“卡片”列表,其中每个卡片都有“点击选择”链接。
当用户单击此链接时,我想在python中调用一个函数来选择此项目,请参阅:
def selectItem(request, item):
#so something with this item
所以,在我的html pagE中:
<div class="card-action">
<a href="{{ selectItem(myitem) }}">Selecionar</a>
</div>
这不起作用。正确的方法是什么?
答案 0 :(得分:2)
您不能调用类似的函数。浏览器使用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
中,我们可以指定网址的外观,例如:
# 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
指向使用正确参数引用select_item
视图的URL。