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

関連する問題