编辑:现在更新我已将问题范围缩小到上下文处理器变量,该变量对我使用自定义标记加载的模板不可用。
我正在使用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"),
]
答案 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']
}