在Django中,不使用模板时如何生成csrf令牌

4du*_*ies 1 python django templates

我用自己的代码编写页面,而不使用Django模板。因为我忙于学习新事物并努力做到这一点。

现在,我有了一些简单的模板案例,并且{%csrf_token%}可以正常工作。但是他们使用了render()和一个模板。

我有一堆自定义HTML,我无法立即弄清楚如何放入模板,因此无法使用render()。相反,我返回了应用于我的页面的HttpResponse(),并且它不处理{%csrf_token%}。

如何将该<input>元素放入页面的表单部分?我愿意从模板而不是页面的其余部分生成表单。

Ble*_*der 6

您可以通过从CSRF中间件调用适当的函数来在Django模板之外获取CSRF令牌:

from django.middleware.csrf import get_token

def your_view(request):
    csrf_token = get_token(request)
    csrf_token_html = '<input type="hidden" name="csrfmiddlewaretoken" value="{}" />'.format(csrf_token)
Run Code Online (Sandbox Code Playgroud)

要记住的一件事是,Django模板并不真正在乎您传递给它们的内容。它们仅触摸{% ... %}{{ ... }}标签之间的内容。如果您的模板只是静态HTML,则Django模板引擎将完全不会触摸它,就像您将其作为普通文件一样。