从一个模板链接到另一个视图的模板

2024-06-01 09:16:24 发布

您现在位置:Python中文网/ 问答频道 /正文

enter image description here

我有一个模板,它显示了一个宿舍的详细信息和一个“房间号码”列表

问题:
我试着把“房间号码”作为每个具体宿舍详情页面的链接(见上面的截图)。寝室详细信息页面的格式如下:房间/<;int:pk> 在my url.py中指定

我在网上搜遍了,找不到我该从哪里开始。Django和Python新手在这里,所以请容忍我

url.py>

urlpatterns = [
    path('', views.index, name='index'),
    path('list/', views.DormsListView.as_view(), name='dorms'),
    path('list/<int:pk>', views.DormsDetailView.as_view(), name='dorm-detail'),
    path('rooms/', views.DormsRoomView.as_view(), name='rooms'),
    path('rooms/<int:pk>', views.DormsRoomsDetailView.as_view(), name='rooms-detail'),
 ]

Views.py(domsDetailView)>

class DormsDetailView(LoginRequiredMixin, generic.DetailView):
    model = Dorm

    def get_context_data(self, *args, **kwargs):
        context = super().get_context_data(*args, **kwargs)
        context['room_numbers'] = ", ".join(self.object.dormroom_set.values_list('room_number', flat=True))
        return context

Views.py(寝室详细视图)>

class DormsRoomsDetailView(LoginRequiredMixin, generic.DetailView):
    model = DormRoom

宿舍详情.html>

<div>Rooms: {{ room_numbers }}</div>

Tags: pathnamepygtviewascontextviews
2条回答

不要把你的列表变成一个带有", ".join()的字符串,你能把它作为一个列表吗?在Dorm_Detail.html中,您可以在它们上面循环

{% for room in room_numbers %}
      <a href="#"> {{ room }} </a>
{% endfor %}

将所有房间号显示为单独的链接。希望我能正确理解这个问题

我会直接在模板里做。返回房间号列表,而不是带逗号的字符串,然后在模板中构建逻辑,包括链接

类似于:

class DormsDetailView(LoginRequiredMixin, generic.DetailView):
    model = Dorm

    def get_context_data(self, *args, **kwargs):
        context = super().get_context_data(*args, **kwargs)
        context['room_numbers'] = self.object.dormroom_set.values_list('room_number', flat=True)
        return context

然后,在模板中:

<div>
    Rooms: 
    {% for room_number in room_numbers %}
        <a href="{% url 'rooms-detail' room_number %}">{{ room_number }}</a>{% if not forloop.last %},{% endif %}
    {% endfor %}
</div>

{% if not forloop.last %},{% endif %}部分只是在房间编号之间添加逗号,就像您在视图中看到的那样。但是当它是最后一次迭代时,它不会打印逗号

相关问题 更多 >