1

flatpage django アプリを拡張して、いくつかのブートストラップ カルーセル機能を含めようとしています。この時点で、「carousel」という新しい django アプリを作成し、model.py 内で、カルーセル画像をアップロードする ImageField と FlatPage の ForeignKey を持つ「CarouselImage」というモデル クラスを定義します。

model.py

from django.contrib.flatpages.models import FlatPage

class CarouselImage(models.Model):
    image = models.ImageField(upload_to='carousel/')
    page = models.ForeignKey(FlatPage)
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)
    active = models.BooleanField(default=True)

def __str__(self):
    return str(self.image)

carousel/admin.py では、この画像1でわかるように、問題はありません。

admin.py

from django.contrib.flatpages.admin import FlatPageAdmin
from django.contrib.flatpages.models import FlatPage
from .models import CarouselImage

class CarouselInline(admin.TabularInline):
    model = CarouselImage
    extra = 1
    allow_add = True

class FlatPageAdminWithCarousel(FlatPageAdmin):
    inlines = [CarouselInline]

admin.site.unregister(FlatPage)
admin.site.register(FlatPage, FlatPageAdminWithCarousel)

問題

結局のところ、私が知る必要があるのは、この画像をテンプレートに渡す方法です。. 問題は、FlatPage には既にビューがあるため、それらの画像をテンプレートに渡すためのビューを作成できないことです。ビューを拡張して別のコンテキストを含める方法があるかどうかはわかりません。

1 つの Stackoverflow QA が templatetags の作成を指摘したので、いくつかのテンプレート タグを作成しようとしましたが、それらの画像をコンテキストとしてテンプレートに渡すことができない場合、templatetags は機能しません。

templatetags/add_carousel.py

from django import template

register = template.Library()

@register.simple_tag(takes_context=True)
def carousel(context):
    image = context['image']
    return str(image)

あなたが与えることができるすべての助けに感謝します,

イヴァン

4

1 に答える 1

2

テンプレート タグのアドバイスの要点を見逃しています。要点は、コンテキストからタグに画像を渡すことではなく、その逆です。つまり、タグ内の画像をクエリして、そこからコンテキストに渡します。

これを行う最善の方法は、単純なタグではなく包含タグを使用することです。包含タグは、独自のコンテキストでレンダリングされる独自のテンプレート フラグメントに関連付けられているため、そこにカルーセルに関連するすべての要素を含めることができます。タグ自体を呼び出すだけでよい完全なフラットページ テンプレートです。

実際にあなたの質問をもう一度見ましたが、これを行う必要さえないことに気付きました。flatpage から image への外部キーがあります: でページの画像を取得できますpage.carouselimage_set.all。これにより、テンプレート タグは無関係になります。

于 2014-07-08T07:30:38.483 に答える