2016-12-22 24 views
0

私はDjangoを初めて使用しています。あなたのイベントのリストを表示するWebアプリケーションを作成したいと思います。いくつかの異なるリスト(スポーツイベント、誕生日など)を持つことができます。私は2つのモデル - カレンダー(イベントのリスト)とイベントを作った。Django - DetailViewとListViewを組み合わせる

私のページには、「カレンダー」のリストが表示されているナビゲーションメニューがあります。あるカレンダーをクリックすると、そのカレンダーの予定一覧が表示されますが、サイドバーにカレンダーの一覧を残したいと思います。

私はDjangoを理解しているので、ListView(サイドバーカレンダー用)とDetailView(各カレンダー上のイベント用)の2つのビューが必要です。ここで

が私の見解です:

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() 

そのアプローチでは、すべての特定のカレンダーに私の詳細はOKですが、私はサイドバーのナビゲーションメニューのカレンダーの私のリストを失います。

私の特定のカレンダーのURL:

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とpath od calendarを比較して解決しようとしましたが、動作しません。

ご協力いただければ幸いです。

答えて

0

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 
+0

ありがとうございます! CreateViewで同じことをする方法はありますか? 'class EventCreate(CreateView):model =イベントフィールド= ['name'、 'description'] success_url = '/ prijavljen /' ... def get_context_data(self、* args、**)コンテクスト['calendars_list'] = Calendar.objects.all()context ['calendar'] = ??????コンテキストを返す – francosy

関連する問題