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

Traceback

... 
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

это как ошибка указывает: ваш контекст не имеет 'request' в нем. Возможно, вам придется добавить 'django.template.context_processors.request' в настройку ваших контекстных процессоров. – solarissmoke

+0

@solarissmoke my 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

Смежные вопросы