Python 尝试在Wagtail CMS中加载自定义标记时出现未解决的库错误

Python 尝试在Wagtail CMS中加载自定义标记时出现未解决的库错误,python,django,wagtail,Python,Django,Wagtail,我是个新手,但对Django有些了解。我试图阅读Wagtail的官方文档,但我被困在了代码片段部分。我试图在home/templates/home/home\u page.html中呈现一个片段NavigationComponent。我在home\templatetags\navigation\u tags.py中定义了一个标记来呈现它。但是,当我尝试使用{%load%}加载标记时,它无法识别它 代码如下:- [base.py] INSTALLED_APPS = [ 'home',

我是个新手,但对Django有些了解。我试图阅读Wagtail的官方文档,但我被困在了代码片段部分。我试图在
home/templates/home/home\u page.html
中呈现一个片段
NavigationComponent
。我在
home\templatetags\navigation\u tags.py
中定义了一个标记来呈现它。但是,当我尝试使用
{%load%}
加载标记时,它无法识别它

代码如下:-

[base.py]

INSTALLED_APPS = [
    'home',
    'search',
    'website',
    'wagtail.contrib.forms',
    'wagtail.contrib.redirects',
    'wagtail.embeds',
    'wagtail.sites',
    'wagtail.users',
    'wagtail.snippets',
    'wagtail.documents',
    'wagtail.images',
    'wagtail.search',
    'wagtail.admin',
    'wagtail.core',
    'modelcluster',
    'taggit',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

###########################################################################################

[home/models.py]

from django.db import models

from wagtail.core.models import Page
from wagtail.snippets.models import register_snippet
from wagtail.admin.edit_handlers import FieldPanel, PageChooserPanel


class HomePage(Page):
    pass


@register_snippet
class NavigationComponent(models.Model):

    name = models.CharField(max_length=50, blank=False)
    link = models.ForeignKey(
        'wagtailcore.Page',
        null=True,
        blank=False,
        on_delete=models.SET_NULL,
        related_name='+'
    )
    url = models.URLField(blank=True, null=True)

    panels = [
        FieldPanel('name'),
        PageChooserPanel('link'),
        FieldPanel('url')
    ]

    def __str__(self):
        return self.name

    class Meta:
        verbose_name_plural = 'Navigation Item Container'
        verbose_name = "Navigation Item Container"


@register_snippet
class NavigationItem(models.Model):

    name = models.CharField(max_length=50, blank=False)
    link = models.URLField()

    class Meta:
        verbose_name_plural = 'Navigation Items'


[home/templatetags/navigation_tags.py]

from django import template
from ..models import NavigationComponent

register = template.Library()


@register.inclusion_tag('../templates/tags/navigation_component.html', takes_context=True)
def navigation_components(context):
    return {
        'components': NavigationComponent.objects.all(),
        'request': context['request']
    }

##########################################################################################

[home/templates/home/home_page.html]

{% extends "base.html" %}
{% load static navigation_tags %}                       # Unresolved library 'navigation_tags'

{% block body_class %}template-homepage{% endblock %}

{% block extra_css %}

<link rel="stylesheet" href="{% static 'css/welcome_page.css' %}">
{% endblock extra_css %}

{% block navigation %}
    {%  navigation_components %}                                       # template error :Invalid block tag
{% endblock %}

{% block content %}

{% endblock content %}



[base.py]
已安装的应用程序=[
“家”,
“搜索”,
"网站",,
"wagtail.contrib.forms",,
“wagtail.contrib.redirects”,
“wagtail.Embeddes”,
“wagtail.sites”,
“wagtail.users”,
“wagtail.snippets”,
"wagtail.documents",,
"摇尾图",,
“摇尾搜索”,
“wagtail.admin”,
"摇尾,核心",,
“模型群集”,
“塔吉特”,
“django.contrib.admin”,
“django.contrib.auth”,
“django.contrib.contenttypes”,
“django.contrib.sessions”,
“django.contrib.messages”,
“django.contrib.staticfiles”,
]
###########################################################################################
[主页/models.py]
从django.db导入模型
从wagtail.core.models导入页面
从wagtail.snippets.models导入寄存器\ U代码段
从wagtail.admin.edit\u handlers import字段面板,页面选择器面板
班级主页(第页):
通过
@寄存器代码段
类导航组件(models.Model):
name=models.CharField(最大长度=50,空白=False)
link=models.ForeignKey(
“wagtailcore.Page”,
空=真,
空白=假,
on_delete=models.SET_NULL,
相关_名称='+'
)
url=models.URLField(blank=True,null=True)
面板=[
FieldPanel(“名称”),
页面选择器面板(“链接”),
FieldPanel('url')
]
定义(自我):
返回self.name
类元:
详细名称\u复数='导航项容器'
详细名称=“导航项容器”
@寄存器代码段
类导航项(models.Model):
name=models.CharField(最大长度=50,空白=False)
link=models.URLField()
类元:
详细名称复数='导航项'
[home/templatetags/navigation_tags.py]
从django导入模板
从..模型导入NavigationComponent
register=template.Library()
@register.inclusion_标记('../templates/tags/navigation_component.html',接受_context=True)
def导航_组件(上下文):
返回{
“组件”:NavigationComponent.objects.all(),
“请求”:上下文[“请求”]
}
##########################################################################################
[home/templates/home/home\u page.html]
{%extends“base.html”%}
{%load static navigation_tags%}#未解析的库“navigation_tags”
{%block body_class%}模板主页{%endblock%}
{%block-extra_-css%}
{%endblock额外_css%}
{%block-navigation%}
{%navigation_components%}#模板错误:无效的块标记
{%endblock%}
{%block content%}
{%endblock内容%}

templatetags
是一个python包。我已经浏览了Django和Wagtail文档,但我不知道我做错了什么。

直接在主页模型的上下文中添加导航组件如何

#models.py
班级主页(第页):
...
def get_上下文(自身、请求):
context=super()。获取上下文(请求)
上下文['components']=NavigationComponent.objects.all()
返回上下文
然后,您可以访问主页.html模板中的queryset组件


...
{组件%中的项的百分比}
{%endfor%}
...
更新

第一步

navigation\u tags.py似乎是正确的,我将把上下文放在这里,因为它似乎没有什么用处

#主页/模板标签/导航标签.py
@register.inclusion\u标记('tags/navigation\u component.html'))
def导航_组件():
返回{'components':NavigationComponent.objects.all()}
步骤2

创建模板navigation\u component.html,将您在另一个带有{%navigation\u components%}的模板中调用标记时想要的内容放在这里


{组件%中的e的百分比}
{%endfor%}
步骤3


{%加载静态导航\u标记%}
...
{%navigation\u components%}
...

小心每个文件路径,祝你好运

您是否在
navigation\u tags.py
旁边创建了一个空的
\uuu init\uuuuuuuuuuuuupy
文件?Python必须将
模板标签
识别为一个模块。
'../templates/tags/navigation\u component.html'
是包含标签上一个奇怪的模板路径。通常从模板文件夹开始,路径是
tags/navigation\u component.html
@gasman是的,
templatetags
是一个python模块。@LucasMoeskops是的,我提供了一个较长的路径,因为我认为如果指定完整路径,它可能会起作用。但在我看来,这不应该有什么不同。这是一个很好的解决办法,并被标记为答案。但是,没有加载标签仍然是一个问题。我必须使用
django admin
创建一个新项目,并删除以前使用
wagtail
创建的项目。谢谢,但我想获得我的声誉积分,所以请查看我的更新