0

我正在尝试为菜单创建一个警报部分(类似于此页面上的菜单https://metageeky.github.io/mega-menu/responsive-header.html

*每个警报都应该有一个生效日期(日期警报是“发布”实时)和解决日期(日期警报是“删除”实时)。每个警报还将有最多一到两句话描述情况的文本。活动/当前警报的数量将显示在图标和警报链接文本后面的括号中。

图标和文字是深橙色。当您将鼠标悬停在图标和文本上时,会出现下划线。

当用户单击该链接时,他们会被带到一个列出所有活动警报的页面。在页面底部,消息显示“如果您遇到问题,请联系我们......”</p>

如果没有警报:

不会出现图标和链接文本后面括号中的警报数量。

图标和警报文本都将为主要蓝色。

当用户单击该链接时,他们将被带到辅助警报页面,该页面显示一条消息,内容为“当前没有活动警报。如果您遇到问题,请通过以下方式与我们联系...”</p>

我将如何实现这一目标?

谢谢你。

4

1 回答 1

1

您的问题有很多要解开的内容,但这是一种高级方法。

1. 定义你的模型

from django.db import models


class Alert(models.Model):
    title = models.CharField()
    description = models.TextField()
    date_from = models.DateTimeField()
    date_to = models.DateTimeField()

2.确保您可以编辑/管理您的模型数据

  • 现在您需要为您的管理员用户提供一种访问数据模型、编辑和创建项目的方法。
  • Wagtail 有一个很棒的Snippets功能,允许它在没有太多更改的情况下工作,你需要添加@register_snippet你的模型并定义一些panels.
from wagtail.admin.edit_handlers import FieldPanel
from wagtail.snippets.models import register_snippet

from django.db import models


@register_snippet
class Alert(models.Model):
    #... fields (defined above)

    panels = [
        FieldPanel('title'),
        FieldPanel('description'),
        FieldPanel('date_from'),
        FieldPanel('date_to'),
    ]

    def __str__(self):
        return self.title

3.准备模板标签,展示查询到的数据

  • 现在,您需要弄清楚如何查询模型,使其根据您的要求返回警报(当前日期应在数据的日期范围内)。
  • Django 有关于编写查询的文档
  • 将此查询结果放入模板的最简单方法是使用自定义模板标签
  • Aninclusion_tag是一种拥有可以在任何地方使用自定义数据的小模板片段的方法(无需将其传递到每个视图中)。
  • 在下面的示例中,您仍然需要创建模板文件,该文件current_alerts.html将包含您希望如何呈现警报。
  • 在您的模板标签模板中,您还可以使用page_url标签提供指向alerts_page
# template_tags/custom_tags.py
# remember to create a template_tags/__init__.py file also
from django import template

from .models import Alert


register = template.Library()

@register.inclusion_tag('current_alerts.html')
def show_alerts():
    # just returns all alerts, but this query can be refined to suit what you need
    current_alerts = alerts.Objects.all()
    alerts_page = AlertPage.Objects.all().first() # this assumes there will only ever be one
    return {'alerts_page',alerts_page,'current_alerts': current_alerts}

4. 使用您的模板标签并添加样式

  • 现在您需要在您的根/共享模板中包含页面顶部的标签。
{% extends "base.html" %}
{% load custom_tags %}


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

​{% show_alerts %}

{% block content %}...{% endblock %}

5. 创建一个AlertsPage

于 2021-09-15T10:47:49.533 回答