2014-09-24 100 views
2

我已经写了Django的网站,用含有如下菜单项列表一个简单的主页:Django的应用程序,添加内容到同一页面

  • 首页
  • 用户
  • 联系

我现在正在为此网站开发一个可选的Django应用程序。安装时,我希望在主页上添加一个名为“Extras”的额外菜单项。

在Django中实现这种事情的最佳方式是什么?

我已经考虑加入这样的事情我settings.py文件:

MENU_ITEMS = [ 
    'Home', 
    'Users', 
    'Contact', 
] 

然后我的应用程序的__init__.py里面,我会做这样的事情:

from django.conf import settings 
settings.MENU_ITEMS.append('Extras') 

并且视角.py文件会将此MENU_ITEMS列表传递给主页模板。这是正确的方法还是有更好的方法?

+0

是有一些原因,你是编程接近呢?最简单的方法是在基本HTML模板的菜单中添加一个'Extras'链接。 – 2014-09-24 08:42:10

+0

@JohnMee如果未安装额外的Django应用程序,那么这不会导致链接断开? – aco 2014-09-25 00:32:49

+0

你说得对。我看到(现在)你正在尝试构建一个可以安装和删除自己的模块。在这种情况下,您可能对[检查已安装的应用程序](https://docs.djangoproject.com/en/1.7/ref/applications/#django.apps.apps.is_installed)感兴趣,以协助确定您的项目属于哪个菜单 - 除了检查本身将是安装的一部分?!我很想暗示你已经过了头。我是。 – 2014-09-25 01:20:00

回答

0

我会给你一个提示:如果可能的话,不要在运行时混淆设置,这些变量是全局的,改变它们可能会导致一些令人讨厌的错误。我不知道,但与该代码你可能最终的东西,如:

MENU_ITEMS = [ 
    'Home', 
    'Users', 
    'Contact', 
    'Extras', 
    'Extras', 
    'Extras', 
    'Extras', 
] 

同样,我不知道那,但你并不需要乱用你的设置,以达到你的目的。

更清晰的方法是让您的视图管理您的视图。如果你想要的只是一个菜单,创建一个基本模板,然后把菜单放在那里,然后从中扩展。如果你想在将来添加任何东西,你只需要改变那一部分(如果你想渲染一些部分取决于用户或某物,你可以在那里添加条件)。 欲了解更多详情,请参阅django docs

例如:

<div class="header navbar"> 
     <div class="container"> 
     <a class="navbar-brand" href="/">{% endraw %}{{ cookiecutter.project_name }}{% raw %}</a> 
     <ul class="nav navbar-nav"> 
      <li class="active"><a href="{% url 'home' %}">Home</a></li> 
      <li><a href="{% url 'about' %}">About</a></li> 

      {% if request.user.is_authenticated %} 
      <li><a href="{% url 'users:detail' request.user.username %}">{% trans "My Profile" %}</a></li> 
      <li><a href="{% url 'account_logout' %}">{% trans "Logout" %}</a></li> 
      {% else %} 
      <li><a href="{% url 'account_signup' %}">{% trans "Sign Up" %}</a></li> 
      <li><a href="{% url 'account_login' %}">{% trans "Log In" %}</a></li> 
      {% endif %} 
     </ul> 
     </div> 
    </div> 
    {% block content %} 
    {% endblock content %} 

如果这是你的基本模板定义,扩展它会默认显示它,仅覆盖其中块内容所在的部分页面。如果你想另一个链接添加到您的导航栏只是这样做:

<li class="active"><a href="{% url 'my_other_url' %}">My new item</a></li> 

你定义“my_other_url”在你urls.py.平常 这是正确的方法来做我认为你正在尝试做的事情。您可以让模板处理您网站的外观,请勿在控制器中混淆视图(如在mvc中)。

如果你想额外的项目可选,你只需要一个标志或送东西到模板及用途:

{% if flag %} 
<li class="active"><a href="{% url 'my_other_url' %}">My new item</a></li> 
{% endif %} 
+0

你能提供一个我如何实现这个目标的例子吗?我希望额外的应用程序向现有主页添加一个元素,而不是创建从原始主页继承的第二个主页,这是文档描述的内容。 – aco 2014-09-25 00:36:29

+0

你可以尝试安装这个项目模板:https://github.com/pydanny/cookiecutter-django。让它工作,然后转到templates/base.html。你可以看到他们有几个页面,他们都有导航栏。这是我用于我的项目的基础。 (如果你不想安装它,你可以检查github中的templates/base.html模板) – cdvv7788 2014-09-25 01:37:44

+0

不知道我明白。 cookiecutter中的导航栏具有一组在基本模板中定义的链接(请参阅https://github.com/pydanny/cookiecutter-django/blob/master/%7B%7Bcookiecutter.repo_name%7D%7D/%7B% 7Bcookiecutter.repo_name%7D%7D /模板/ base.html文件)。另一个应用程序将如何添加一个额外的链接到这个导航栏? – aco 2014-09-26 07:42:30

相关问题