Как вставить токен django csrf прямо в HTML?

в моем приложении django я храню строки html в БД, которые затем будут отображаться на домашних страницах пользователей как "сообщения". Некоторые из этих сообщений содержат формы, но не написаны на языке шаблонов, я не могу вставить токен csrf (таким образом, нарушая приложение).

есть ли способ вставить этот токен непосредственно из файлов python, которые я редактирую? я ищу что-то вроде:

csrf_token = django.csrf.generate()
message = "press the button please: <form><input type='hidden' name='csrf_token' value='%s'><input type='submit' value='press here'></form>" % (csrf_token)

любое другое решение, которое бы работать по подобному сценарию было бы здорово. Спасибо

Edit: На самом деле это не сработает, потому что токен отличается для каждого сеанса, поэтому хранить его в БД не очень полезно. есть ли способ динамически загружать токен в представлении?

3 ответов


вызов django.middleware.csrf.get_token(request) чтобы получить токен CSRF.


способ его использования,и использовать его непосредственно в шаблонах.

С документация,:

<form action="" method="post">
{% csrf_token %}

- это все, что вам нужно включить.


принятый ответ предполагает, что токен уже установлен в объекте запроса.

может, что-то вроде этого лучше:

from django.middleware import csrf
def get_or_create_csrf_token(request):
    token = request.META.get('CSRF_COOKIE', None)
    if token is None:
        token = csrf._get_new_csrf_key()
        request.META['CSRF_COOKIE'] = token
    request.META['CSRF_COOKIE_USED'] = True
    return token