在应用程序之间传递django上下文

在应用程序之间传递django上下文,django,django-views,django-context,Django,Django Views,Django Context,所以我对Django还比较陌生,我正在创建一些简单的网站。现在我正在尝试创建一个网站,可以用来托管我的一些其他应用程序。目前,主站点通过向模板传递名称/URL字典来呈现导航栏。例如,这是主网站的views.py: from django.shortcuts import render_to_response navbar = [{'Home': '/'}, {'Apps': '/apps/'}, {'Dropdown': '', 'G

所以我对Django还比较陌生,我正在创建一些简单的网站。现在我正在尝试创建一个网站,可以用来托管我的一些其他应用程序。目前,主站点通过向模板传递名称/URL字典来呈现导航栏。例如,这是主网站的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/appender.html”,即:

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

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

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

处理任何事情的最佳实践都是有争议的。创建导航栏时,我建议使用以下选项之一:

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

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

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