python - 尝试加载“menus.templatetags.menus_tags”时引发 ImportError:无法从“menus.models”导入名称“菜单”
问题描述
我只是靠着鹡鸰,现在有点困惑。我有一个文件夹结构:
站点 > 菜单 > 模板标签 > menus_tags.py
这是代码:
from django import template
from ..models import Menu
register = template.Library()
@register.simple_tag()
def get_menu(slug):
return Menu.objects.get(slug=slug)
然后在我的模型中( site > menus > models.py ):
"""Menus models"""
from django.db import models
from django_extensions.db.fields import AutoSlugField
from modelcluster.fields import ParentalKey
from modelcluster.models import ClusterableModel
from wagtail.admin.edit_handlers import (
MultiFieldPanel,
InlinePanel,
FieldPanel,
PageChooserPanel
)
from wagtail.core.models import Orderable
from wagtail.snippets.models import register_snippet
class MenuItem(Orderable):
link_title = models.CharField(
blank=True,
null=True,
max_length=50
)
link_url = models.CharField(
max_length=500,
blank=True
)
link_page = models.ForeignKey(
"wagtailcore.Page",
null=True,
blank=True,
related_name="+",
on_delete=models.CASCADE,
)
open_in_new_tab = models.BooleanField(default=False, blank=True)
page = ParentalKey("Menu", related_name="menu_items")
panels = [
FieldPanel("link_title"),
FieldPanel("link_url"),
PageChooserPanel("link_page"),
FieldPanel("open_in_new_tab")
]
# @todo add properties
# link
@register_snippet
class Menu(ClusterableModel):
"""The main menu clusterable model."""
title = models.CharField(max_length=100)
slug = AutoSlugField(populate_from="title", editable=True)
panels = [
MultiFieldPanel([
FieldPanel("title"),
FieldPanel("slug"),
], heading="Menu"),
InlinePanel("menu_items", label="Menu Item")
]
def __str__(self):
return self.title
现在,当我编译时,我现在收到上述导入错误。我确信路径是正确的,但我不知道为什么它可以从模型中导入菜单。任何帮助将非常感激。
非常感谢
解决方案
您的class Menu
定义是缩进的,因此它出现在的定义中class MenuItem
- 这意味着它作为models
模块内的类不可见。删除此缩进,它应该可以工作。
推荐阅读
- asp.net-core - 如何在 ASP.NET Core 5.0 中阻止其他数据
- python - 扫雷岛检测
- ruby-on-rails - 将雪花集成到 Ruby on rails
- vue.js - 在 main.js 文件中导入自定义 vue 组件
- python - 如何实现计数器以动态创建井字棋盘
- python - Pandas - 如何修改绘图栏中的历史图的宽度?
- python - 虚幻引擎 PIE 使用 Python 启动和停止
- flutter - 列内的 Flutter Listview 未占用全高
- reactjs - 使用反应选择框设置文本框值
- validation - 多行文本字段中的多个条目,共享点中具有验证条件