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

时间:2017-12-21 08:21:54

标签: python django

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

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

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

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

settings.py:

e.preventDefault();
var input_term = $('#input-box').val();
if(!input_term.trim()) {
    alertError({
        message: "Missing Token"
    });
 return;
}

context_processors.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',
            ],
        },
    },
]

tags.py

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

views.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,
    }

urls.py

from django.views.generic import ListView
from appname.models import MyModel

class MyView(ListView):
    model = MyModel

template.html

from django.conf.urls import url

from appname.views import MyView

urlpatterns = [
    url(r'^$', MyView.as_view(), name="home"),
]

1 个答案:

答案 0 :(得分:0)

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

tags.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'] 
    }