2016-07-27 137 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