Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有一种方法可以使用Wagtail片段来显示现有的Django模型?_Python_Django_Wagtail - Fatal编程技术网

Python 有没有一种方法可以使用Wagtail片段来显示现有的Django模型?

Python 有没有一种方法可以使用Wagtail片段来显示现有的Django模型?,python,django,wagtail,Python,Django,Wagtail,对于Wagtail CMS,模仿Django CMS的“插件”功能的最佳方式是什么 在Django CMS中,我能够编写一个可以显示模板和该模型的任何相关信息的程序。然后,内容管理器可以将该插件添加到网站上任何位置的占位符中 对于Wagtail,我能找到的最接近的东西是,但是每次使用代码片段时,都必须将其专门包含在页面模型中 以这两个模型为例: class Pet(models.Model): species = models.CharField(max_length=10) nam

对于Wagtail CMS,模仿Django CMS的“插件”功能的最佳方式是什么

在Django CMS中,我能够编写一个可以显示模板和该模型的任何相关信息的程序。然后,内容管理器可以将该插件添加到网站上任何位置的占位符中

对于Wagtail,我能找到的最接近的东西是,但是每次使用代码片段时,都必须将其专门包含在页面模型中

以这两个模型为例:

class Pet(models.Model):
   species = models.CharField(max_length=10)
   name = models.CharField(max_length=100)

class Book(models.Model):
   title = models.CharField(max_length=100)
   author = models.CharField(max_length=100)
为了让content manager能够访问这些内容,我需要将它们注册为代码段,然后按如下方式列出该页面模型中的每个模型:

class HomePage(Page):
    content_panels = Page.content_panels + [
        SnippetChooserPanel('pet'),
        SnippetChooserPanel('book'),
    ]

Wagtail有更好的方法吗?

要在不定义模型的情况下实现这种解决方案,您可以查看StreamField方法

您可以定义一个自定义的StreamField块类型,该块类型为
pets
books
建模。如果要在需要此功能的页面上使用此功能,您仍然必须明确哪些页面可以使用此StreamField

然后,您可以定义用于呈现这些项目的自定义模板,该模板可在文档中找到:


要在不定义模型的情况下实现此类解决方案,您可以查看StreamField方法

您可以定义一个自定义的StreamField块类型,该块类型为
pets
books
建模。如果要在需要此功能的页面上使用此功能,您仍然必须明确哪些页面可以使用此StreamField

然后,您可以定义用于呈现这些项目的自定义模板,该模板可在文档中找到:


要使用通用定义的模板实现此类解决方案,您可以在
书籍
宠物
类上定义方法

比如:

from django.template.loader import render_to_string
from django.utils.safestring import mark_safe


class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    template = 'path/to/template.html'

    get_as_html(self):
        return mark_safe(render_to_string(self.template, {'self': self}))

您需要创建处理图书实例的模板文件。这意味着您可以在使用图书片段的任何模板中轻松调用
{{Book.get_has_html}

要使用通用定义的模板实现此类解决方案,您可以在
图书
宠物
类上定义一个方法

比如:

from django.template.loader import render_to_string
from django.utils.safestring import mark_safe


class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    template = 'path/to/template.html'

    get_as_html(self):
        return mark_safe(render_to_string(self.template, {'self': self}))

您需要创建处理图书实例的模板文件。这意味着您可以在使用图书片段的任何模板中轻松调用
{{Book.get\u has\u html}

将此标记为正确答案。确认了我的假设,即必须显式声明代码段。谢谢。请将此标记为正确答案。确认了我的假设,即必须显式声明代码段。非常感谢。