Python 尝试在Wagtail CMS中加载自定义标记时出现未解决的库错误
我是个新手,但对Django有些了解。我试图阅读Wagtail的官方文档,但我被困在了代码片段部分。我试图在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',
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
创建的项目。谢谢,但我想获得我的声誉积分,所以请查看我的更新