首页 > 解决方案 > 尝试加载“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

现在,当我编译时,我现在收到上述导入错误。我确信路径是正确的,但我不知道为什么它可以从模型中导入菜单。任何帮助将非常感激。

非常感谢

标签: pythondjangowagtail

解决方案


您的class Menu定义是缩进的,因此它出现在的定义中class MenuItem- 这意味着它作为models模块内的类不可见。删除此缩进,它应该可以工作。


推荐阅读