python - 如何显示电话簿的详细视图?
问题描述
我试图显示存储在电话簿中的联系人的详细视图。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。另外,我怎么知道用户点击了哪个电话簿?
解决方案
我想出了如何让它发挥作用,我正在回答它,以便如果有人陷入困境,它可以帮助自己。
# views.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, phone_book_id):
try:
all_contacts = Contact.objects.filter(pk=phone_book_id)
except Contact.DoesNotExist:
raise Http404("PhoneBook Does Not Exist!")
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('campaign/', create_campaign, name="create-campaign"),
path('view/', view_phone_book, name="view-phone-book"),
path('detail/<int:phone_book_id>', detailed_view_phone_book, name="detail-view-phone-book"),
<!--view_phone_book.html-->
<body>
{% for phone_book in all_phone_books%}
<a href="{% url 'detail-view-phone-book' phone_book.id%}">{{ phone_book }}</a>
<br>
{% endfor %}
<a href="{% url 'index' %}">Back To Home</a>
</body>
<!--detailed_view_phone_book.html-->
{% if all_contacts %}
<table>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Phone Number</th>
</tr>
{% for contact in all_contacts %}
<tr>
<form>
<td>{{ contact.first_name }}</td>
<td>{{ contact.last_name }}</td>
<td>{{ contact.phone_number }}</td>
</form>
</tr>
{% endfor %}
</table>
{% endif %}
<a href="{% url 'index' %}">Back To Home</a>
我看了Brain 的 CS50 视频,这对我有帮助。我会建议你也这样做。他以对初学者友好的方式解释了这些概念。
推荐阅读
- amp-html - amp-分析和 amp-youtube。如何动态跟踪页面上所有视频的播放/停止事件?
- c# - MS Graph Explorer:如何使用 GraphServiceClient 对象获取特定用户的驱动器
- google-sheets-api - google-api-ruby-client:批量更新电子表格值
- java - Selenium,带有 PageFactory 的 Java 陈旧元素引用
- audio - 从 Flac 到 Ogg 的 ffmpeg 转换会产生损坏的文件
- python - 二叉搜索树删除 Python
- javascript - 用于非前端项目的 Webpack 联合模块
- matlab - 在 Matlab 中实现电气网络的光学解决方案
- reactjs - 是否可以创建不自动连接的 SockJS 客户端?
- model - R 中逻辑回归中 Rockr 中的预测函数