0

Я пытаюсь создать собственное приложение для Blog с Django 1.6. Я разработал список категорий непатентованного видом, как это:Как показать список категорий, сделанный общими представлениями на нескольких страницах?

urls.py

url(r'^categories/?$', views.ListView.as_view(model=Category), name='categories'), 

category_list.html

<h3>Categories</h3> 
    {% for category in object_list %} 
    <ul> 
     <li>{{ category.title }}</li> 
    </ul> 
    {% endfor %} 

все категории теперь перечислены в /categories.

Моя проблема в том, когда я добавляю его в base.html или index.html файла вывода изменения в article.title не category.title Как я могу добавить этот список Категория на другие страницы, такие как индекс или статьи? Вот мой полный views.py файл:

views.py

from django.shortcuts import get_object_or_404, render 
from django.views.generic import ListView, DetailView 

from blog.models import Article, Category 

class IndexView(ListView): 
    template_name = 'blog/index.html' 
    context_object_name = 'latest_article_list' 

    def get_queryset(self): 
     return Article.objects.order_by('-pub_date')[:10] 

class ArticleView(DetailView): 
    model = Article 
    template_name = 'blog/article.html' 

ответ

1

Это делает article.title потому что object_list точки в контексте представления статьи, вы не можете включить изолированный вид в другой вид.

Я думаю, что самым чистым способом было бы создать класс mixin для контекста категорий и добавить его в каждый вид, который должен отображать его.

Что-то вроде этого:

class CategoryMixin(object): 
    def get_categories(self): 
     return Category.objects.all() 

    def get_context_data(self, **kwargs): 
     context = super(CategoryMixin, self).get_context_data(**kwargs) 
     context['categories'] = self.get_categories() 
     return context 

затем добавить его к классу вида:

class IndexView(CategoryMixin, ListView): 
    ... 

, а также включает в себя category_list.html внутри каждом шаблоне, передавая переменный контекст (таким образом, вы выделили имена переменных):

{% include "category_list.html" with object_list=categories only %}