gpt4 book ai didi

django-cms 将顶级菜单重定向到第一个子菜单

转载 作者:行者123 更新时间:2023-12-02 12:43:23 26 4
gpt4 key购买 nike

我想重定向我正在编写的页面中的顶部菜单项,以指向他们的 child (如果有的话)。例如。该网站有一个顶级“关于”,下面有几个 CMS 页面。当用户单击“关于”时,我想在顶级“关于”菜单下显示第一个子页面。

我可以像下面那样做,但感觉不对。我知道我可以进行静态重定向,但我不想这样做,因为第一个 child 可能会改变(毕竟这是一个 CMS 系统),而且我不希望将数据输入 CMS 的人必须进行管理重定向。所以我更喜欢下面的配置重定向。

这是一个非常常见的要求,有标准的方法吗?我想我也许可以用 navigation modifier 来做到这一点,所以我下一步可能会尝试这条路线。

    <div style="display:none;">{% show_menu 0 1 1 %}</div>
<div id="topmenu">
<ul>
{% for child in children %}
<li>
{% if child.children %}
<a href="{{child.children.0.get_absolute_url}}">
{% else %}
<a href="{{child.get_absolute_url}}">
{% endif %}
{{ child.get_menu_title }}
</a>
</li>
{% endfor %}
</ul>
</div>

关于上述内容,我需要在那里有 show_menu,否则我的自定义菜单中没有数据。有什么办法可以不需要这个吗?

我最不喜欢上面的事情是/about/页面仍然处于事件状态。如果有人浏览那里,他们会得到一个空白页面,这并不是世界上最糟糕的事情,但我宁愿这种情况不要发生。我想如果我写一个导航扩展也会有同样的缺点。我想我需要一个编程重定向来重定向到第一个 child (如果该页面被点击)。想法?我也许可以用模板逻辑来做到这一点,但这看起来很疯狂。

最佳答案

2018:更新版本,适用于 cms 3.4+ 并兼容新的中间件样式 available here 。添加/firstchild 后,您需要在 cms 页面的更改列表中编辑/发布重定向页面,正如您猜想的那样,将重定向。

<小时/>

使用中间件和自定义重定向字段值“/firstchild”的解决方案,以触发重定向。

  • 另外:您不会有任何空白页
  • 加号:它很灵活,因为它允许不会重定向到子页面的页面
  • 加号:当第一个子级的网址更改时无需执行任何操作
  • 小缺点:总会有一个重定向(不过 301 也不错;)
  • 小缺点:配置有点繁琐,因为您必须在“重定向”字段中输入“/firstchild”。绝对对最终用户不友好,但有效。 cms 本身根本没有提供更好的解决方案(即使在 2018 年也没有)。
<小时/>
from django.shortcuts import redirect

# redirect to first subpage if the "redirect" field is exactly "_subpage"
class RedirectSubpageMiddleware(object):
def process_view(self, request, view_func, view_args, view_kwargs):
if request.current_page:
page = request.current_page
if "slug" in view_kwargs and page.get_redirect() == "/firstchild":
subpages = request.current_page.children.all()
if subpages.count():
# can redirect! must make uri!
return redirect(subpages[0].get_absolute_url(), permanent=True)
return None

关于django-cms 将顶级菜单重定向到第一个子菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9336482/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com