【问题标题】:How to extend the Django FlatPage view to include another context?如何扩展 Django FlatPage 视图以包含另一个上下文?
【发布时间】:2014-08-28 18:02:50
【问题描述】:

我正在尝试扩展平面 django 应用程序以包含一些引导轮播功能。 此时,我创建了一个名为“carousel”的新 django 应用程序,在 model.py 中我定义了一个名为“CarouselImage”的模型类,它有一个用于上传轮播图像的 ImageField 和一个用于 FlatPage 的 ForeignKey。

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 已经有一个视图,所以我无法创建一个视图来将这些图像传递给模板。 我不知道是否有办法扩展视图以包含另一个上下文。

一个 Stackoverflow QA 指出了模板标签的创建,所以我尝试创建一些模板标签,但如果我不能将这些图像作为上下文传递给模板,那么模板标签将无法工作。

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)

感谢您提供的所有帮助,

伊万

【问题讨论】:

    标签: django twitter-bootstrap carousel django-templates django-flatpages


    【解决方案1】:

    您错过了模板标签建议的要点。重点不是将图像从上下文传递到标签中,而是反过来:查询标签中的图像,然后将它们从那里传递到上下文中。

    最好的方法是使用包含标签而不是简单标签:包含标签与其自己的模板片段相关联,它使用自己的上下文呈现,因此您可以在其中包含与轮播相关的所有元素,并且从完整的平面页面模板中,您只需要调用标签本身。

    虽然实际上我现在再次查看您的问题,但我意识到您甚至不需要这样做。您有一个从平面页面到图像的外键:您可以使用page.carouselimage_set.all 获取页面的图像。这使得模板标签无关紧要。

    【讨论】:

    • 非常感谢。这对我来说很清楚。
    猜你喜欢
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多