我使用Django-Jet模板在Django 1.11中工作。
现在我需要扩展模板以显示从视图中恢复的一些数据。所以,我定义了我的模板和我的观点。 这是代码:
views.py
from django.shortcuts import render
from django.shortcuts import render_to_response
from django.views.generic import View
from django.template.context import RequestContext
from django.template import Context, Template
class MyView(View):
def get(self, request, *args, **kwargs):
op = str(self.kwargs['op']).strip().lower()
pk = self.kwargs['pk']
if op =='get':
template='frontend/templates/show_my_data.html'
return render_to_response(template,{'foo':'bar'})
else:
return HttpResponse("Not found")
我的简单模板:
{% extends "admin/base.html" %}
{% load i18n admin_urls static admin_modify %}
{% block content %}
{{ foo }}
{% endblock %}
settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'static/')],
'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',
],
},
},
]
....
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
但是当我进行测试时,我得到一个关键错误:
Request Method: GET
Request URL: http://127.0.0.1:8000/admin/data_from_db/get/24/
Django Version: 1.11.2
Exception Type: KeyError
Exception Value:
'user'
Exception Location: /home/marco/sviluppo/myapp/myvenv/lib/python3.4/site-packages/django/template/context.py in __getitem__, line 87
Python Executable: /home/marco/sviluppo/myapp/myvenv/bin/python
所以,我做了一些测试,我发现问题是(可能)在上下文变量中。这是我需要扩展的基本模板:
base.html文件
.....
{% if user.is_active and user.is_staff %}
{% jet_get_menu as app_list %}
{% if SIDE_MENU_COMPACT %}
{% for app in app_list %}
#print menu
{% endfor%}
.........
如果我删除第一个条件:{%if user.is_active和user.is_staff%},{%jet_get_menu中的KeyError将为app_list%}。 我会告诉你一些屏幕。
普通管理模板:
如果我不从base.html模板中删除{%if user.is_active和user.is_staff%},则查看结果
你可以看到页面完全是空的:没有菜单标签,右上角没有登录框,ecc。
似乎没有像用户这样的上下文变量,但我不明白为什么。
答案 0 :(得分:0)
您需要在每个模板中加载jet_tags,您将使用它们:
{% load jet_tags %}
答案 1 :(得分:0)
您需要使用render
快捷方式而不是render_to_response
,以便运行上下文处理器。
if op == 'get':
template = 'frontend/templates/show_my_data.html'
return render(request, template, {'foo':'bar'})