Python和Django请求上下文错误

Python和Django请求上下文错误,python,django,Python,Django,我正在建立一个Django站点,该站点被转移给了我,我遇到了一个奇怪的错误。这只发生在调用下面模板代码的页面上。我尝试删除模板调用,应用程序只返回一个500错误。有没有人见过这样的情况,或者能够提出进一步的故障排除方法?Ubuntu12、Apache2、MySQL、Mod_Python、Python 2.7、Django 1.4 堆栈跟踪: MOD_PYTHON ERROR ProcessId: 8770 Interpreter: 'ip-10-245-86-33.ec2.in

我正在建立一个Django站点,该站点被转移给了我,我遇到了一个奇怪的错误。这只发生在调用下面模板代码的页面上。我尝试删除模板调用,应用程序只返回一个500错误。有没有人见过这样的情况,或者能够提出进一步的故障排除方法?Ubuntu12、Apache2、MySQL、Mod_Python、Python 2.7、Django 1.4

堆栈跟踪:

MOD_PYTHON ERROR

ProcessId:      8770
Interpreter:    'ip-10-245-86-33.ec2.internal'

ServerName:     'ip-10-245-86-33.ec2.internal'
DocumentRoot:   '/home/public_html/site'

URI:            '/location/index.html'
Location:       '/'
Directory:      None
Filename:       '/home/public_html/site/apache/django.wsgi'
PathInfo:       '/location/index.html'

Phase:          'PythonHandler'
Handler:        'django.core.handlers.modpython'

Traceback (most recent call last):

  File "/usr/lib/python2.7/dist-packages/mod_python/importer.py", line 1537, in HandlerDispatch
    default=default_handler, arg=req, silent=hlist.silent)

  File "/usr/lib/python2.7/dist-packages/mod_python/importer.py", line 1229, in _process_target
    result = _execute_target(config, req, object, arg)

  File "/usr/lib/python2.7/dist-packages/mod_python/importer.py", line 1128, in _execute_target
    result = object(arg)

  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/modpython.py", line 180, in handler
    return ModPythonHandler()(req)

  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/modpython.py", line 158, in __call__
    response = self.get_response(request)

  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 179, in get_response
    response = self.handle_uncaught_exception(request, resolver, sys.exc_info())

  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 228, in handle_uncaught_exception
    return callback(request, **param_dict)

  File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py", line 91, in _wrapped_view
    response = view_func(request, *args, **kwargs)

  File "/usr/local/lib/python2.7/dist-packages/django/views/defaults.py", line 33, in server_error
    return http.HttpResponseServerError(t.render(Context({})))

  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 140, in render
    return self._render(context)

  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 134, in _render
    return self.nodelist.render(context)

  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 823, in render
    bit = self.render_node(node, context)

  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 837, in render_node
    return node.render(context)

  File "/usr/local/lib/python2.7/dist-packages/django/template/loader_tags.py", line 123, in render
    return compiled_parent._render(context)

  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 134, in _render
    return self.nodelist.render(context)

  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 823, in render
    bit = self.render_node(node, context)

  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 837, in render_node
    return node.render(context)

  File "/usr/local/lib/python2.7/dist-packages/django/template/loader_tags.py", line 123, in render
    return compiled_parent._render(context)

  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 134, in _render
    return self.nodelist.render(context)

  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 823, in render
    bit = self.render_node(node, context)

  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 837, in render_node
    return node.render(context)

  File "/usr/local/lib/python2.7/dist-packages/django/template/loader_tags.py", line 62, in render
    result = block.nodelist.render(context)

  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 823, in render
    bit = self.render_node(node, context)

  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 837, in render_node
    return node.render(context)

  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 1107, in render
    return func(*resolved_args, **resolved_kwargs)

  File "/home/public_html/site/asite/templatetags/meta_extras.py", line 35, in meta_url_reverse
    host = context["request"].get_host();

  File "/usr/local/lib/python2.7/dist-packages/django/template/context.py", line 54, in __getitem__
    raise KeyError(key)

KeyError: 'request'
模板代码:

{% block meta %}
    {% load meta_extras %}
    {% meta_title flatpage.title %}
    {% meta_description flatpage.content %}
    {% meta_url_reverse "asite_flatpage" flatpage.url %}
    {% block meta_image %}{% endblock %}
{% endblock %}
有问题的函数调用:

from django import template
from django.template.loader_tags import register
from django.core.urlresolvers import reverse_lazy
from django.template.context import Context

@register.simple_tag(takes_context=True)
def meta_url_reverse(context,args, pk=None):
    if pk is not None:
        url = reverse_lazy(args,args=[pk]);
    else:
        url = reverse_lazy(args);


    host = context["request"].get_host();
    if context["request"].is_secure():
        protocol = "https"
    else:
        protocol = "http"


    return "<link rel='canonical' href='{2}://{1}{0}'></link><meta property='og:url' content='{2}://{1}{0}' />".format(url,host,protocol)
来自django导入模板的

从django.template.loader_标记导入寄存器
从django.core.urlResolver导入反向
从django.template.context导入上下文
@register.simple\u标记(接受\u context=True)
def meta_url_reverse(上下文、参数、主键=无):
如果pk不是None:
url=reverse_lazy(args,args=[pk]);
其他:
url=反向延迟(args);
主机=上下文[“请求”]。获取主机();
如果上下文[“请求”]是安全的():
协议=“https”
其他:
协议=“http”
返回“”格式(url、主机、协议)

该错误是一个
keyrerror
投诉密钥
请求
不可用于上下文

确保您的
模板\u上下文\u处理器
包括或明确将其添加到呈现模板的视图中的上下文中

==编辑==


如果设置中存在这种情况,那么您还需要确保视图本身返回的是
RequestContext
而不是
Context

django是否还没有URL的
反向
功能?有什么错误?为什么要使用
reverse\u lazy
?什么是
平面页面。url
?请在此处包含堆栈跟踪,以便为将来的访问者设置上下文,同时,请正确设置代码格式。您应该使用
构建绝对uri
,而不是手动操作。感谢所有提示!我的python技能不是很好,我没有写这段代码,我只是在安装时收到它的,所以我不知道为什么它会做任何事情。现在我只想让它运行,不管怎样,将来可能会有重写。我检查了它:TEMPLATE_CONTEXT_PROCESSORS=(“django.contrib.auth.CONTEXT_PROCESSORS.auth”,“django.core.CONTEXT_PROCESSORS.debug”,“django.core.CONTEXT_PROCESSORS.i18n”,“django.core.CONTEXT_PROCESSORS.media”,“django.core.context_processors.request”,)