Skip to main content
 首页 » 编程设计

python之Django 上下文处理器不在模板中显示新的上下文值

2025年01月19日23itcoder

编辑:现在已更新,我已将问题缩小到上下文处理器变量对我使用自定义标签加载的模板不可用。

我正在使用 Django 1.11,这是我第一次尝试使用自定义上下文处理器。

问题是我应该从上下文处理器添加的上下文变量不会从自定义标记加载的模板中返回任何内容。我没有收到任何错误。

所以下面的 {{ testcontext }} 应该返回“IT WORKED!”并在我的 base.html 模板中执行此操作,但在使用 @register.inclusion_tag() 加载的模板中不返回任何内容。

设置.py:

TEMPLATES = [ 
    { 
        'BACKEND': 'django.template.backends.django.DjangoTemplates', 
        'DIRS': [os.path.join(BASE_DIR, 'templates')], 
        'APP_DIRS': True, 
        'OPTIONS': { 
            'context_processors': [ 
                'django.template.context_processors.debug', 
                'django.template.context_processors.request', 
                'django.contrib.auth.context_processors.auth', 
                'django.contrib.messages.context_processors.messages', 
                'appname.context_processors.test_context', 
            ], 
        }, 
    }, 
] 

context_processors.py:

def test_context(request): 
    return {'testcontext': 'TEST WORKED!'} 

标签.py

from django import template 
 
from appname.models import Category 
 
register = template.Library() 
 
@register.inclusion_tag('template.html') 
def load_category(selected_slug=None): 
    return { 
        'categories': Category.objects.all(), 
        'selected':selected_slug, 
    } 

views.py:

from django.views.generic import ListView 
from appname.models import MyModel 
 
class MyView(ListView): 
    model = MyModel 

网址.py

from django.conf.urls import url 
 
from appname.views import MyView 
 
urlpatterns = [ 
    url(r'^$', MyView.as_view(), name="home"), 
] 

模板.html

{{ testcontext }} 

请您参考如下方法:

所以问题出在我的自定义标记在加载 template.html 时没有携带上下文。所以下面的代码修复了它,上下文处理器中的我的变量现在按预期工作。

标签.py

from django import template 
 
from appname.models import Category 
 
register = template.Library() 
 
@register.inclusion_tag('template.html', takes_context=True) 
def load_category(context,selected_slug=None): 
    return { 
        'categories': Category.objects.all(), 
        'selected': selected_slug, 
        'testcontext': context['testcontext']  
    }