Я не понимаю, как виджет pinax-like может работать с текущим кодом.Оно сломано.Я вижу, вы открыли проблему, если кто-то все еще активно поддерживает ее, они могут ее исправить.Или вы могли бы это исправить и предложить запрос на удаление.
Есть две проблемы с {% likes_widget %}
:
Он не может работать без ajax, потому что это просто ссылка, то есть он отправит запрос GET на ваш взгляд,Но представление ожидает POST-запрос, что логично, так как симпатия вносит изменения в базу данных, и поэтому должно быть POST.Следовательно, без ajax представление выдает ошибку 405.
Он использует eldarion-ajax для выполнения запроса POST ajax, но, с другой стороны, это просто событие a.click
, оно выиграло 'не публиковать какие-либо данные, т.е. он не публикует токен CSRF.Представление не разрешит отсутствующий токен (у него нет декоратора @csrf_exempt), поэтому выдает ошибку 403.
Теперь я вижу только один способ - написать свой собственный HTML и / или Ajax, а не использовать likes_widget.
Вы можетеоберните кнопку «Мне нравится» в форму и замените кнопку «Мне нравится» на <button>
, который отправляет форму (вместо тега <a>
).Таким образом, вы можете включить тег {% csrf_token %}
в форму, и сообщение будет работать.Это обновит страницу.
Вы можете написать свой собственный вызов ajax, чтобы обработать нажатие кнопки «Мне нравится» и выполнить публикацию в том же виде и включить csrftoken в опубликованные данные.
Это довольно просто реализовать, вы можете использовать существующее представление типа pinax, так что это всего лишь изменение в вашем HTML-шаблоне.