Django模板繼承下的動態數據傳遞—上下文處理器


參考:http://www.caodahua.cn/detail/3/

 

模板繼承可以減少頁面內容的重復定義,實現頁面內容的重用。我的個人博客右側的導航欄都是繼承base頁面從而讓代碼得到最大程度的復用。但是當父模板中有動態數據的話,這些動態數據在子模版中是不會顯示的。我們可以通過自定義上下文處理器來解決。

 

Django上下文處理器(Context Processor)

上下文處理器是接收HttpRequest為參數並返回dict形式的數據的函數。它的主要用途是將所有模板共享的公共數據添加到上下文中,從而不必在每個視圖中重復定義。

在settings.py文件中內置了多個上下文處理器:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            # 上下文處理器:context_processors
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'django.template.context_processors.media',
            ],
        },
    },
]

每個內置處理器的功能可查看官方文檔:https://docs.djangoproject.com/zh-hans/2.1/ref/templates/api/#built-in-template-context-processors

開始動手,定義自己的上下文處理器

1.在相應的app下新建py文件,如context_processors.py

Snipaste_2018-11-15_21-27-08.jpg

2.定義一個函數如navigation_bar,接收request參數。

Snipaste_2018-11-15_21-33-26.jpg

函數里寫上處理動態數據的代碼。

3.將自定義的上下文處理器添加到settings.py文件中

Snipaste_2018-11-15_21-45-11.jpg

直接添加即可。

4.模板中的使用

{% for article in hot_articles %}
    ...
{% endfor %}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM