Django-CMS中的URL设计

0 投票
2 回答
1970 浏览
提问于 2025-04-17 18:56

我正在使用django-cms来设计一个网站,目前我需要创建一个基本的主页,上面有像关于我们产品联系我们这样的菜单。

我已经完成了djangodjango-cms的所有必要设置,激活了管理部分,并且一切运行得很好。

我创建了一个主页模板,里面包含了关于我们产品联系我们,并通过django-cms的admin创建了一个名为aboutus的页面,slug为about-us

现在我把这个slugabout-us放在关于我们菜单的链接里,所以当我点击这个链接时,它能正常工作,并把我重定向到页面aboutus,浏览器中的网址是http://localhost:8080/aboutus

但问题是,当我再次点击aboutus链接时,它生成的链接变成了两次,也就是http://localhost:8080/aboutus/aboutus,也就是说每次点击时,slugaboutus都会被加到网址后面。

以下是我的代码

settings.py

TEMPLATE_CONTEXT_PROCESSORS = (
     .......
    'cms.context_processors.media',
    'sekizai.context_processors.sekizai',
)
CMS_TEMPLATES = (
    ('home.html', gettext('Home')),
    ('aboutus.html', gettext("About Us")),
    ('management_team.html',gettext('Management Team')),
)
.....
....

urls.py

from django.conf.urls.defaults import *
from django.contrib import admin
from django.conf import settings

admin.autodiscover()

urlpatterns = patterns('',

     url(r'^admin/', include(admin.site.urls)),
     url(r'^', include('cms.urls')),
)

home.html

{% load cms_tags sekizai_tags %}
{% load staticfiles %}
{% load staticfiles %}
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>{% block head %}{% endblock %}</title>
      {% render_block "css" %}
  </head>
  <body>
      {% cms_toolbar %}
        <div class="submenu">
            <a href="about-us">About Company Services</a><br />
            <a href="management-team">Our Management Team</a>
        </div>
        <a href="about-us" class="menu aboutus">About Us</a></div>
      {% render_block "js" %}
  </body>
</html>

上面是我的整体代码,其中home.html显示了一个主页,菜单如下(使用了一些CSS样式)

   About Us
        About Company Services 
        Our Management Team

所以当我点击关于我们链接时,生成的链接是http://localhost:8000/about-us/,而当我点击关于公司服务时,生成的链接是http://localhost:8000/about-us/about-us,再点击我们的管理团队时,链接变成http://localhost:8000/about-us/about-us/our-management-team/。所以网址是不断加在之前的网址后面,而不是加在域名后面。

我通过django-cms的管理界面创建了所有页面,使用的是创建的模板

   Page Name                slug

   About Us                 about-us
   About Company Services   about-us 
   Our Management Team      our-management-team 

那么上面的代码有什么问题呢?为什么网址会加在之前的网址后面,而不是加在域名后面?

如何在django-cms的管理界面中创建子页面(关于公司服务、我们的管理团队),并将它们归属于父页面(关于我们)

其实我想在关于我们页面下创建两个页面(关于公司服务、我们的管理团队),我们该如何在django-cms的管理界面中实现这一点?

有没有人能告诉我django-cms中菜单的概念,我已经尝试过并阅读了django-cms的文档很多次,但还是无法理解菜单的概念,所以才来这里询问。

2 个回答

1

使用{% show_menu %}这个模板标签来显示菜单。记得去看看相关的文档,了解更多信息。

3

如果这是你在管理后台的页面布局(/admin/cms/page):

- Home (level=0)
    - About Us (level=1)
        - About Company Services (level=2)
            - Foo Bar (level=3)
        - Our Management Team (level=2)
    - Some Other Section (level=1)
        - Some Sub Section (level=2)
    - ...

当你打印 {% show_menu A B C D %} 时,你实际上是在生成一个 ul 菜单,其中 A、B、C 和 D 是用来设置菜单显示的数字。

A = Start
B = End
C = Inactive
D = Active

比如说 {% show_menu 1 2 0 100 %}

  • A=1 表示从第 1 级开始导航,也就是说不包括第 0 级的 Home
  • B=2 表示导航可以显示到第 2 级,也就是不包括 Foo Bar
  • C=0 表示对于不活跃的路径,显示 0 级别。所以如果我们现在在 About Us 页面,我们在菜单下不会看到 Some Other Section 的任何链接(因为这是一个不活跃的路径),但我们仍然会看到 About Company...Our Management...(因为这是一个活跃的路径)。
  • D=100 表示对于当前活跃的路径,可以显示到 100 级别(这就是为什么我们能看到上面提到的 About Company...Our Management)。

所以最终的结果是:

- About Us (level=1)
    - About Company Services (level=2)
    - Our Management Team (level=2)
- Some Other Section (level=1)

撰写回答