python - 在 Django 中访问多个模板中的模型项
问题描述
我有一个指向主页的视图。在我的主页上,我有
{% for item in items %}
{{ item.name }}<br>
{{ item.title }}
{% endfor %}
我找不到在另一个页面中访问相同项目的方法。在其他页面中编写相同的代码不会返回任何内容。我该怎么办呢?
解决方案
您需要一种方法来引用您传递到主页上下文的对象(项目)或查询集(项目)。对于每个项目,您可以通过将pk
Item 对象的 * 作为 URL 关键字参数 (aka kwarg
) 来执行此操作。
* 'pk' 表示'主键'。就像每个对象的 ID 号一样。
将此添加到您的urlpatterns
in urls.py
:
path('items/<pk>/', views.item_detail, name='item_detail'),
现在,当给定适当的pk
, 和视图名称时,您可以在模板中“反转”(即生成)URL。
例如,在您的主页模板代码中,您可以item
像这样为每个模板创建一个链接:
<a href="{% url 'item_detail' pk=item.pk %}">{{ item.title }}</a>
现在,每个链接都会根据pk
您创建的每个 Item 对象生成一个 URL。
如果您在查看页面时加载页面的 HTML,您会看到 {% url %} 标记已被 URL 替换,例如http://localhost:8000/items/2/
.
现在,您可以在您的视图中创建一个item_detail
视图,该视图views.py
将显示每个项目的详细信息:
from django.shortcuts import render
from [your_app].models import Item
def item_detail(request, pk):
item = Item.objects.get(pk=pk)
return render(request, 'item_detail.html', {'item': item})
templates
并在您的目录 ( )中为新视图创建一个 HTML 模板item_detail.html
:
<h1>{{ item.name }}</h1>
<p>{{ item.title }}</p>
现在每个页面都会自动显示每个对象的详细信息。
推荐阅读
- c - 数字频率程序(HackerRank)
- java - 操作栏和片段之间的空行
- mysql - MYSQL查询各种版本的常见bug
- c# - 使用 Asp .Net MVC 的 Google 两因素身份验证
- c++ - 比较两个没有共同行的大文件
- c++ - 是否有可能使用 debug_info 获取 ELF 文件的源代码?
- amazon-s3 - 如何在 AWS Amplify Storage.get API 函数中获取永不过期的 URL?
- c# - 使用 Firebase 匿名登录时,ProviderData 为空
- google-cloud-platform - 模板化数据流中的 Pub/Sub 输入完全忽略 NestedValueProvider
- javascript - 如何使用正则表达式在 div 类中获取段落