我是Django的新手,我想建立一个网络应用程序,向您显示您的活动列表。你可以有几个不同的名单(比如体育赛事,生日......)。我制作了两个模型 - 日历(事件列表)和事件。
在我的页面上,我有导航菜单,您可以在其中查看"日历"的列表。当您点击一个日历时,您可以看到该日历的事件列表,但我也希望在侧栏中保留日历列表。
据我所知,Django我需要两个视图 - ListView(侧边栏日历)和DetailView(每个日历上的事件)。
以下是我的观点:
class DetailView(generic.DetailView):
model = Calendar
template_name = 'koledarji/detail.html'
class CalendarsView(generic.ListView):
template_name = 'koledarji/calendars.html'
context_object_name = 'calendars_list'
def get_queryset(self):
return Calendar.objects.all()
通过这种方法,我在每个特定日历上的详细信息都可以,但我在侧边栏导航菜单上丢失了日历列表。
我的特定日历网址:
url(r'^(?P<pk>[0-9]+)$', views.DetailView.as_view(), name='detail'),
和我模板的一部分:
{% extends 'prijavljen/calendar.html' %}
{% block cal_name %}
{% for calendar in calendars_list %}
{% if request.path == '/prijavljen/'|add:calendar.id %}
{{calendar.name }}
{% endif %}
{% endfor %}
{% endblock %}
在该代码之后我想制作一个事件列表,但是例如,甚至日历的名称应该足以解决。
我试图通过比较request.path和我想要的路径od日历来解决这个问题,但也无法解决。
任何帮助都将不胜感激。
答案 0 :(得分:3)
您可以修改DetailView
类并添加get_context_data()
方法。这将允许您将额外的上下文(在本例中为Calendars.objects.all()
查询集)注入详细视图。
class MyDetailView(generic.DetailView):
model = Calendar
template_name = 'koledarji/detail.html'
def get_context_data(self, *args, **kwargs):
context = super(MyDetailView, self).get_context_data(*args, **kwargs)
context['calendars_list'] = Calendar.objects.all()
return context
答案 1 :(得分:0)
使用ListView会更好,因为您可能仍想使用分页。像这样:
class DetailListView(ListView):
detail_context_object_name = 'object'
def get(self, request, *args, **kwargs):
self.object = self.get_object()
return super(DetailListView, self).get(request, *args, **kwargs)
def get_queryset_for_object(self):
raise NotImplementedError('You need to provide the queryset for the object')
def get_object(self):
queryset = self.get_queryset_for_object()
pk = self.kwargs.get('pk')
if pk is None:
raise AttributeError('pk expected in url')
return get_object_or_404(queryset, pk=pk)
def get_context_data(self, **kwargs):
context = super(DetailListView, self).get_context_data(**kwargs)
context[self.detail_context_object_name] = self.object
return context