所以我对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/,network.com/apps/的链接,以及一个标题为“Dropdown”的下拉列表,其中包含指向Google的链接和stackoverflow。
我的问题是我创建了另一个具有自己视图的应用程序,这些视图使用自己的上下文值呈现给其他模板。例如,它可能会使用:
def appview(request):
## view logic...
context = {"users": users, "comments": comments}
render_to_response("app/response.html", context)
如果我愿意的话,我可以打开应用程序,以便用“website / apprender.html”代替“app / response.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)
但我想知道最佳做法是什么。那么 是最佳做法?
答案 0 :(得分:0)
处理任何事情的最佳做法都值得商榷。创建导航栏时,我建议使用以下方法之一:
将导航栏实施为模板标签。模板标签可以加载到任何模板中,并在整个项目中生成一致的导航栏,或者只包含在base.html中。如果你想挂钩这个导航栏,可以通过允许templatetag标记一个参数来做到这一点,该参数可以是现有菜单结构的附加菜单或增量值的列表。
如果您的导航栏永远不会更改的另一个解决方案是直接在base.html文件中对其进行编码,其他模板将继承该文件。在任何情况下,更改导航栏都需要对项目进行新的提交,并且您可以避免使用复杂的模板逻辑来为其生成html。