0

私はmodels.pyにモデルがあります:

class Category(models.Model):
    name = models.CharField('Nazwa Kategorii', max_length=100)
    slug = models.SlugField('Odnośnik', unique=True, max_length=100)
    icon = models.ImageField('Ikonka Kategorii', upload_to='icons',
                              blank=True)
    class Meta:
        verbose_name = "Kategoria"
        verbose_name_plural = "Kategorie"

    def __unicode__(self):
        return self.name

そして、私はすべてのカテゴリのリストで表示を行いたい:views.py

class CategoryList(generic.ListView):
    model = models.Category
    context_object_name = 'category_list'
category_list = CategoryList.as_view()

base.htmlには次のものがあります。

{% for entry in category_list %}
<li><a href="#">{{ entry.name }} </a></li>
{% endfor %}

ただし、カテゴリは返されません。何が恋しい?カテゴリリスト付きの基本テンプレートメニューを追加したい。

4

1 に答える 1

2

base.htmlにcategory_listコンテキスト変数が設定されているとは思わないでください。CategoryList クラス ビューは、デフォルトでテンプレート '< app_name >/category_list.html' を使用します。これは、このビューにtemplate_names属性を設定することで変更できます。

すべてのテンプレートで「category_list」コンテキスト変数にアクセスできるようにする場合 (base.html で使用しようとしていることを考慮すれば可能です)、コンテキスト プロセッサを定義し、この変数をコンテキストに追加する必要があります。

必要なコンテキスト プロセッサは次のようになります。

def menu_processor(request):
    return {
        'category_list': Category.objects.all() 
    } 

この関数をコードのどこかに定義したら (関連アプリの context_processors.py に配置することをお勧めします)、これを TEMPLATE_PROCESSORS 設定変数に登録する必要があります (上記の django ドキュメントへのリンクを参照してください)。

ここで最後に言及することは、このコードはリクエストごとに実行されるため、クエリ結果をキャッシュすることを検討する必要があるということです。

于 2013-01-15T18:55:15.953 に答える