2012-01-05 106 views
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模板變量?

謝謝你的時間。

回答

6

使用上下文處理器。

將您的功能的名稱添加到TEMPLATE_CONTEXT_PROCESSORSsettings.py中。

我用一個簡單的背景處理器是:

def common_request_parameters(request): 
    return {'home_login_form': AuthenticationForm(request)} 
+1

非常感謝你。 :) 得到它了。 – CppLearner 2012-01-06 00:23:33

相關問題