【发布时间】:2020-01-28 16:57:27
【问题描述】:
我正在尝试显示存储在电话簿中的联系人的详细视图。 PhoneBook(id, name) 是我的模型之一,它是模型 Contact(id, first_name, last_name, phone_number, phone_book) 的外键。
在我的索引页面中,有一个打开电话簿的按钮。之后,我希望用户可以点击电话簿并显示详细视图(first_name、last_name、phone_number)。
在 view.py 中,我有一个函数可以捕获所有电话簿,并通过 context(dict) 传递它。在我的模板中,我使用了一个 for 循环来遍历所有电话簿并打印它们。
我无法将页面指向详细视图。如何获取用户点击的电话簿?以及如何将页面从 ./view 定向到 ./detail
# view.py
def view_phone_book(request):
all_phone_books = PhoneBook.objects.all()
context = {
'all_phone_books': all_phone_books
}
return render(request, "CallCenter/view_phone_book.html", context)
def detailed_view_phone_book(request):
all_contacts = Contact.objects.all().filter(phone_book=phone_book_user_clicked_on)
context = {
'all_contacts': all_contacts
}
return render(request, "CallCenter/detailed_view_phone_book.html", context)
# urls.py
urlpatterns = [
path('', index, name="index"),
path('create/', create_phone_book, name="create"),
path('add/', add_to_phone_book, name="add"),
path('view/', view_phone_book, name="view"),
path('detail/', detailed_view_phone_book, name="detailed_view")
]
# models.py
class PhoneBook(models.Model):
"""
Model to store customer to a phone book
"""
name = models.CharField(max_length=10, blank=False)
def __str__(self):
return self.name
class Contact(models.Model):
"""
Model to store customer to a phone book.
"""
first_name = models.CharField(max_length=50, blank=False)
last_name = models.CharField(max_length=50, blank=False)
phone_number = models.CharField(max_length=13, blank=False, unique=True)
phone_book = models.ForeignKey(PhoneBook, on_delete=models.CASCADE)
def __str__(self):
return self.phone_number
<!--view_phone_book.html-->
<table>
<tr>
<th>Phone Book</th>
</tr>
{% for phone_book in all_phone_books %}
<tr>
<form method="get" action="../detail/"><td><a href="">{{ phone_book }}</a> </td></form>
</tr>
{% endfor %}
</table>
<!--detailed_view_phone_book.html-->
<table>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Phone Number</th>
</tr>
{% for phone_detail in all_phone_detail %}
<tr>
<form>
<td>{{ phone_detail.first_name }}</td>
<td>{{ phone_detail.last_name }}</td>
<td>{{ phone_detail.phone_number }}</td>
</form>
</tr>
{% endfor %}
</table>
我无法从 ./view 转到 ./detail。另外,我怎么知道用户点击了哪个电话簿?
【问题讨论】:
-
你可以使用js加载detailview,然后渲染到你的电话簿上。如果你只想使用模板,也可以,但是成本很高,你必须为每个电话簿创建像所有细节一样的模态,这样当点击一个按钮时,你就可以显示相应的模态
标签: python html django python-3.x