2
想这就是我们要在每一个页面,我们创建“base_template.html”在Django中传递全局模板变量的正确方法是什么?
<title>{% block title %}{{ page_title }}{% endblock %}</title>
<a href="http://{{domain}}{{current_path}}">{{ page_title }}</a>{% endblock %}
而是从各个视图功能路过PAGE_TITLE,域的current_path如:
def display_meta(request):
user_meta = request.META.items()
sorted_meta = sorted(user_meta) # a list of tuples
return render_to_response('meta.html', {'sorted_meta': sorted_meta,
'current_path': request.get_full_path(),
'domain': request.get_host(),
'page_title': display_meta.__name__})
# and repeat the dictionary same manner for other views....
#urls.py
('^book_list/$', 'object_get_list', {'model': models.Book}),
一种不同的方法是包裹视图函数
# urls.py
('^book_list/$', views.get_template(views.object_get_list),{'model': models.Book}),
# views.py
def get_template(view, **extrakw):
def wrapview(request, **extrakw):
template_dict = {'current_path': request.get_full_path(), 'domain': request.get_host()}
extrakw['template_dict'] = template_dict
return view(request, **extrakw)
return wrapview
def object_get_list(request, **kwargs):
model = kwargs.pop('model', None)
model_name = model.__name__.lower()
template_dict = kwargs.pop('template_dict', None)
template_dict[model_name] = model.objects.all()
template_dict['page_title'] = model_name +" list"
template_name = '%s.html' %(model_name)
return render_to_response(template_name, template_dict)
亲:除了编辑htmls之外,现在修改只在一个视图中完成,而不是在每个视图中完成。
缺点:丑陋的URLconf大概错误propne太
尝试3: 创建一个全球性的词典就像template_dict我创建。
template_dict = {/..../}
def view1()
def view2() ...
问题:我不能使用request.path(或任何与请求有关的事情)。这回落到以前的尝试(包装)。
但是必须有一个更简单的方法。在整个Django站点中传递全局模板变量的正确方法是什么,所以每个视图函数现在独立于gloabl模板变量?
谢谢你的时间。
非常感谢你。 :) 得到它了。 – CppLearner 2012-01-06 00:23:33