从一个模板Django链接到不同视图的模板

时间:2018-02-17 16:26:07

标签: python django

enter image description here

我有一个模板,显示宿舍的详细信息,其中列出了" room_numbers"。

问题:
我正在尝试制作" room_numbers"作为每个特定宿舍详细信息页面的链接(见上面的截图)。宿舍详细信息页面具有以下格式: rooms /< int:pk> ,如我的urls.py中所述

我已经浏览过网络,无法找到我需要开始的地方。 Django和Python新手在这里请耐心等待。

URLs.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(DormsDetailView)&gt;

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(DormRoomsDetailView)&gt;

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

Dorm_Detail.html&gt;

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

2 个答案:

答案 0 :(得分:0)

您可以将列表保留为列表,而不是将列表转换为包含", ".join()的字符串吗?在Dorm_Detail.html中,您可以循环遍历它们。

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

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

答案 1 :(得分:0)

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

类似的东西:

<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 %}

process.env部分只是在房间号码之间添加逗号,就像您在视图中一样。但是当它是最后一次迭代时,它就不会打印逗号。