python - 使用 render_to_string 时填充 {% csrf_token %}?

标签 python django

我需要使用render_to_string,但是我不能使用

@csrf_protect

并通过

context_instance=RequestContext(request)) 

到 render_to_string,因为我认为装饰器期待的是 HttpResponse,而不是 SafeString。

如何将 csrf_token 放入我的字符串中?

'NoneType' object has no attribute 'COOKIES'

编辑:感谢您的评论,这里有一些澄清:

我正在创建一个“面板”系统,类似于“portlets”,其中面板在数据库中配置(包括将面板呈现为字符串的 python 函数的名称 - 面板函数在运行时从它们的导入数据库中的名称)。

为了将这些面板放入页面中,我创建了一个自定义模板标签,它从数据库中读取所需面板的名称,将它们呈现为字符串,然后返回一大块 html(作为字符串)到正在呈现的页面。 (这允许用户选择为他们显示哪些面板。)

我的问题是其中一个面板(使用 render_to_string 将模板呈现为字符串的简单 python 函数)中有一个表单。

我需要将 CSRF 字段插入该表单,因为它被呈现为字符串。

最佳答案

我已经解决了这个问题,但我仍然非常想要一个好的解决方案。

面板功能现在看起来像:

def render_to_s(request, *args, **kwargs):
    panelDisplays = PanelDisplay.listAll()
    csrf_token_value = request.COOKIES['csrftoken']

    c = {"panelDisplays": panelDisplays, "csrf_token_value": csrf_token_value}
    return render_to_string('panels/config.html', c)

虽然模板现在包括:

<div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='{{ csrf_token_value }}'/></div>

关于python - 使用 render_to_string 时填充 {% csrf_token %}?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10354352/

相关文章:

python - 删除 HTML 文件中的换行符

javascript - DJANGO ImageKit 功能

django - Apache 或 lighttpd

python - 动态检查是否存在 slug

javascript - Django 将 JSON 数据传递给静态 getJSON/Javascript

Python 线程和 GIL

python - 使用 EmailField 调用 form.errors 期间出现 DjangoUnicodeDecodeError

python - Django ORM : avoid multiple queries when saving models with foreign key relationships

python - 在回归(非分类)问题中使用 softmax 作为隐藏层激活函数是否可以接受?

python - Django DRF : @permission_classes not working