У меня есть Django 2.1 views.py, который я хотел преобразовать в представление на основе классов, я НЕ являюсь продвинутым пользователем Django и знаю, что неправильно перевел функции. Код был предназначен для обслуживания модальной формы Ajax Bootstrap, и не просите меня посмотреть какое-то решение, уже построенное там, я перепробовал все, даже те, которые работали нормально в автономном режиме, они не совместимы / конфликтуют с моим шаблоном (Может быть, jquery или ..). Я преобразовал представление списка и пока что создал представление, но продолжаю получать эту ошибку:
UserWarning: A {% csrf_token %} was used in a template, but the context did not provide the value. This is usually caused by not using RequestContext.
"A {% csrf_token %} was used in a template, but the context "
Вот мой views.py, который я хочу преобразовать в CBV:
from django.shortcuts import render, get_object_or_404
from django.http import JsonResponse
from django.template.loader import render_to_string
from .models import Book
from .forms import BookForm
from django.views.generic import TemplateView, ListView, DetailView, CreateView, UpdateView, DeleteView
#The Old function List view
#def book_list(request):
# books = Book.objects.all()
# return render(request, 'books/book_list.html', {'books': books})
#The New Class List view
class Book_list(ListView):
template_name = 'books/book_list.html'
model = Book
def save_book_form(request, form, template_name):
data = dict()
if request.method == 'POST':
if form.is_valid():
form.save()
data['form_is_valid'] = True
books = Book.objects.all()
data['html_book_list'] = render_to_string('books/includes/partial_book_list.html', {
'books': books
})
else:
data['form_is_valid'] = False
context = {'form': form}
data['html_form'] = render_to_string(template_name, context, request=request)
return JsonResponse(data)
def book_create(request):
if request.method == 'POST':
form = BookForm(request.POST)
else:
form = BookForm()
return save_book_form(request, form, 'books/includes/partial_book_create.html')
def book_update(request, pk):
book = get_object_or_404(Book, pk=pk)
if request.method == 'POST':
form = BookForm(request.POST, instance=book)
else:
form = BookForm(instance=book)
return save_book_form(request, form, 'books/includes/partial_book_update.html')
def book_delete(request, pk):
book = get_object_or_404(Book, pk=pk)
data = dict()
if request.method == 'POST':
book.delete()
data['form_is_valid'] = True
books = Book.objects.all()
data['html_book_list'] = render_to_string('books/includes/partial_book_list.html', {
'books': books
})
else:
context = {'book': book}
data['html_form'] = render_to_string('books/includes/partial_book_delete.html', context, request=request)
return JsonResponse(data)
Бьюсь уже 9 дней. расспрашивал, спрашивал даже разработчика этого кода ... нет ответа .. Я очень ценю это, спасибо, ребята
🤔 А знаете ли вы, что...
Python является интерпретируемым языком программирования.
Вы можете попробовать это, чтобы изменить свое представление на представления на основе классов
class BookList(ListView):
template_name = 'books/book_list.html'
model = Book
class BookCreate(CreateView):
template_name = "books/includes/partial_book_list.html"
model = Book
form_class = BookForm
success_url = 'success' #name of url you want to redirect to
class BookUpdate(UpdateView):
model = Book
form_class = BookForm
fields = ['name',] #field's you want to update
template_name = 'books/includes/partial_book_update.html'
success_url = 'success' #name of url you want to redirect to
class BookDelete(DeleteView):
model = Book
template_name = 'books/includes/partial_book_delete.html'
success_url = 'success'