2016-07-27 134 views
0

我试图在我的django项目中实现一个模板标记,并且我是一个关键错误。我相信这与在load_menu.py下的模板标签中获取上下文有关。KeyError异常类型Django模板标记

Exception Type: KeyError 
Exception Value:'request' 
Error during template rendering 

In template C:\Users\Eric Franzen\PycharmProjects\MySite\templates\app\TikSys\tiksys_home.html, error at line 0 

request 
1 {% extends 'app/TikSys/tiksysbase.html' %} 
2 {% block content %} 
3 <div class="body-container"> 
4 {% include "app/TikSys/sidenavbar.html" %} 
5 <div class="col-md-10 "> 
6 <div class="jumbotron"> 
7  <h1>Welcome to TikSys!</h1> 
8  <p>Please Sign In</p> 
9  </div> 
10 </div> 

回溯

... 
File "C:\Users\Eric Franzen\PycharmProjects\MySite\Site\views.py", line 43, in tiksys_home 
     return render(request, 'app/TikSys/tiksys_home.html', {}) 
... 
File "C:\Users\Eric Franzen\PycharmProjects\MySite\Site\templatetags\load_menu.py", line 10, in menu 
    request = context['request'] 

网站/ templatetags/load_menu.py

from django import template 
from Site.models import * 

register = template.Library() 


@register.inclusion_tag('app/TikSys/sidenavbar.html', takes_context=True) 
def menu(context): 
    request = context['request'] 
    um = UserMunicipal.objects.filter(userID=request.user).values('municipalID') 
    m = Municipal.objects.filter(id=um) 
    return {'menus': m} 

应用程序/ TikSys/sidenavbar.html

<div class="col-md-2 NavBar"> 
    {% load load_menu %} 
    {% menu %} 
    {% for item in menus %} 
     <ul class="nav nav-pills nav-stacked"> 
      <li>{{ item.name }} </li> 
    </ul> 
    {% endfor %} 
</div> 

views.py

from django.shortcuts import render 

# Create your views here. 
from django.http import HttpResponse 
from django.template import Context, loader 
from django.views.generic import TemplateView 
from Site.forms import UserForm, UserProfileForm 
from django.http import * 
from django.shortcuts import render_to_response, redirect 
from django.template import RequestContext 
from django.contrib.auth.decorators import login_required 
from django.contrib.auth import authenticate, login, logout 
from django.contrib.auth import get_user_model 
from .models import Notification, UserMunicipal, Municipal 

@login_required(login_url='/login/') 
def tiksys_home(request): 
    return render(request, 'app/TikSys/tiksys_home.html', {}) 
+0

正如错误指示:您的上下文没有“请求”。您可能需要将'django.template.context_processors.request'添加到您的上下文处理器设置中。 – solarissmoke

+0

@solarissmoke我的setting.py已经包含了这个,'OPTIONS':['context_processors':[ 'django.template.context_processors.request',' – enrique2334

+0

@solarissmoke我刚加了它 – enrique2334

回答

1

您正在加载的标签,在被渲染标签相同的模板。这就是为什么没有上下文了。

的标签生成app/TikSys/sidenavbar.html模板,应该只有这一点:

<div class="col-md-2 NavBar"> 
    {% for item in menus %} 
     <ul class="nav nav-pills nav-stacked"> 
      <li>{{ item.name }} </li> 
    </ul> 
    {% endfor %} 
</div> 

在主模板(在您需要的菜单),添加 - 在顶部{% load load_menu %},然后在您想要的菜单中,您添加了{% menu %},如下所示:

{% load load_menu %} 
{% extends 'app/TikSys/tiksysbase.html' %} 
{% block content %} 
<div class="body-container"> 
    {% menu %} 
    <div class="col-md-10 "> 
    <div class="jumbotron"> 
     <h1>Welcome to TikSys!</h1> 
     <p>Please Sign In</p> 
    </div> 
    </div> 
+0

非常感谢! – enrique2334