0

所以我对 Django 还很陌生,正在创建一些简单的网站。现在我正在尝试创建一个可以用来托管我的其他一些应用程序的网站。目前,主站点通过将名称/网址字典传递给模板来呈现导航栏。例如,这是主网站的views.py:

from django.shortcuts import render_to_response

navbar = [{'Home': '/'},
          {'Apps': '/apps/'},
          {'Dropdown': '',
          'Google': 'http://www.google.com',
          'Stackoverflow': 'http://www.stackoverflow.com'}]

context = {'navbar': navbar}


def home(request):
    return render_to_response("website/home.html", context)


def apps(request):
    return render_to_response("website/applist.html", context)

这导致主视图和应用程序列表视图都有一个导航栏,其中包含指向 website.com/、website.com/apps/ 的链接,以及一个标题为“Dropdown”的下拉列表,其中包含指向 google 和 stackoverflow 的链接。

我的问题是我创建了另一个应用程序,该应用程序具有自己的视图,该视图使用自己的上下文值呈现给其他模板。例如,它可以使用:

def appview(request):
    ## view logic...
    context = {"users": users, "comments": comments}
    render_to_response("app/response.html", context)

如果我愿意,我可以切换应用程序以采用将“app/response.html”替换为“website/apprender.html”的参数,即:

def appview(request, template):
    ## view logic...
    context = {"users": users, "comments": comments}
    render_to_response(template, context)

但上下文仍然只包含用户和评论,而不是我的导航栏信息。我在想我应该为应用程序添加的输入上下文添加另一个参数,即

def appview(request, template, context):
    ## view logic...
    context["users"] = users
    context["comments"] = comments
    render_to_response(template, context)

但我想知道最佳做法是什么。那么最佳实践是什么?

4

1 回答 1

0

处理任何事情的最佳实践是值得商榷的。创建导航栏时,我会建议以下其中一项:

  • 将导航栏实现为模板标签。模板标签可以加载到任何模板中,并在整个项目中生成一致的导航栏,或者只包含在 base.html 中。如果您想挂接到此导航栏,您可以通过允许模板标签标记一个参数来实现,该参数将是附加菜单列表或现有菜单结构的增量值。

  • 如果您的导航栏永远不应该更改,另一种解决方案是将其直接编码到您的 base.html 文件中,其他模板将从该文件继承。在任何情况下,更改导航栏都需要对您的项目进行新的提交,并且您可以避免复杂的模板逻辑来为其生成 html。

于 2013-05-03T17:39:59.767 回答