在配置了csrf之后页面报错

来源:3-8 mako的配置与使用方法

PARADISELIN

2019-10-13

def render_to_response(request, template, data=None):
    context_instance = RequestContext(request)
    path = settings.TEMPLATES[0]['DIRS'][0]
    lookup = TemplateLookup(
        directories=[path],
        output_encoding='utf-8',
        input_encoding='utf-8'
    )
    mako_template = lookup.get_template(template)

    if not data:
        data = {}

    if context_instance:
        context_instance.update(data)
    else:
        context_instance = Context(data)

    result = {}
    for d in context_instance:
        result.update(d)

    result['csrf_token'] = '<input type="hidden" name="csrfmiddlewaretoken" value={0} />'.format(
        request.META['CSRF_COOKIE']
    )
    return HttpResponse(mako_template.render(**data))

报错信息:

图片描述

写回答

4回答

慕哥1266152

2019-10-17

改成 data['csrf_token']='<input type="hidden" name="csrfmiddlewaretoken" value="{0}" />'.format(request.META.get('CSRF_COOKIE',""))


4
1
PARADISELIN
非常感谢!
2019-10-17
共1条回复

deweizhang

2023-04-10

这个问题在提问区域有完整解决 可以查一查,之前帮同学解决过

0
0

慕哥1266152

2019-10-17

又有了 我也不知道为什么, 一开始确实没有. 用get只是为了设置个默认值, 就不会报错了.


//img.mukewang.com/szimg/5da837cc08e05c9816850977.jpg


0
0

deweizhang

2019-10-13

你的问题在于baserenderpy的31行 keyerror 单从你的代码看不出哪行是,但你可以自己锁定31行 keyerror是dict字典的错误 以此为起点进行检查一下

0
7
yu444913387
回复
deweizhang
# _*_coding:utf-8_*_ from mako.lookup import TemplateLookup from django.template import RequestContext from django.conf import settings from django.template.context import Context from django.http import HttpResponse from django.template.context_processors import csrf def render_to_response(request, template, content=None): context_instance = RequestContext(request) path = settings.TEMPLATES[0]['DIRS'][0] lookup = TemplateLookup( directories=[path], output_encoding='utf-8', input_encoding='utf-8' ) mako_template = lookup.get_template(template) if not content: content = {} if context_instance: context_instance.update(content) else: context_instance = Context(content) data = {} for d in context_instance: data.update(d) data['csrf_token'] = ''.format( csrf(request).get('csrf_token')) # for k,v in csrf(request).items(): # print(k,'-------',v) # print(data.get('csrf_token')) return HttpResponse(mako_template.render(**data))
2023-04-10
共7条回复

Django入门到进阶-适合Python小白的系统课程

入门Django的同时,让你形成更贴近实际工作的Python Web开发知识体系

1114 学习 · 464 问题

查看课程