Django 添加详细信息链接


详细信息模板

我们网页的下一步将添加一个详细信息页面,我们可以在其中列出有关特定成员的更多详细信息。

首先创建一个名为的新模板details.html:

my_tennis_club/members/templates/details.html:

<!DOCTYPE html>
<html>

<body>

<h1>{{ mymember.firstname }} {{ mymember.lastname }}</h1>
  
<p>Phone: {{ mymember.phone }}</p>
<p>Member since: {{ mymember.joined_date }}</p>

<p>Back to <a href="/members">Members</a></p>

</body>
</html>

在全员模板中添加链接

名单在all_members.html应该是可点击的,并带您进入详细信息页面,其中包含您点击的会员的 ID:

my_tennis_club/members/templates/all_members.html:

<!DOCTYPE html>
<html>
<body>

<h1>Members</h1>
  
<ul>
  {% for x in mymembers %}
    <li><a href="details/{{ x.id }}">{{ x.firstname }} {{ x.lastname }}</a></li>
  {% endfor %}
</ul>

</body>
</html>

创建新视图

然后在其中创建一个新视图views.py文件,它将处理传入的请求 /details/网址:

my_tennis_club/members/views.py:

from django.http import HttpResponse
from django.template import loader
from .models import Member

def members(request):
  mymembers = Member.objects.all().values()
  template = loader.get_template('all_members.html')
  context = {
    'mymembers': mymembers,
  }
  return HttpResponse(template.render(context, request))
  
def details(request, id):
  mymember = Member.objects.get(id=id)
  template = loader.get_template('details.html')
  context = {
    'mymember': mymember,
  }
  return HttpResponse(template.render(context, request))

这个details视图执行以下操作:

  • 得到id作为一个论点。
  • 使用id在成员表中找到正确的记录。
  • 加载details.html模板。
  • 创建一个包含该成员的对象。
  • 将对象发送到模板。
  • 输出由模板呈现的 HTML。

添加网址

现在我们需要确保/details/url 指向正确的视图,其中id作为参数。

打开urls.py文件并将详细信息视图添加到urlpatterns列表:

my_tennis_club/members/urls.py:

from django.urls import path
from . import views

urlpatterns = [
    path('members/', views.members, name='members'),
    path('members/details/<int:id>', views.details, name='details'),
]
运行示例 »

如果您在自己的计算机上执行了所有步骤,则可以在自己的浏览器中看到结果:127.0.0.1:8000/members/

如果服务器关闭,您必须使用以下命令重新启动它runserver命令:

py manage.py runserver