views.py 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. # textdocs/views.py
  2. from django.shortcuts import render, get_object_or_404, redirect
  3. from django.urls import reverse_lazy # NEW: Useful for delete success URL
  4. from django.http import HttpResponse
  5. from django.template.loader import render_to_string
  6. from weasyprint import HTML
  7. from .models import Document
  8. from .forms import DocumentForm
  9. def document_list(request):
  10. """Shows a list of all created documents."""
  11. documents = Document.objects.order_by('-created_at')
  12. return render(request, 'textdocs/document_list.html', {'documents': documents})
  13. def document_detail(request, pk):
  14. """Shows the details of a single document."""
  15. document = get_object_or_404(Document, pk=pk)
  16. return render(request, 'textdocs/document_detail.html', {'document': document})
  17. def document_create(request):
  18. """Handles the creation of a new document via a form."""
  19. if request.method == 'POST':
  20. form = DocumentForm(request.POST)
  21. if form.is_valid():
  22. document = form.save()
  23. return redirect('document_detail', pk=document.pk)
  24. else:
  25. form = DocumentForm()
  26. return render(request, 'textdocs/document_form.html', {'form': form})
  27. # --- NEW: View for updating a document ---
  28. def document_update(request, pk):
  29. """Handles editing and saving an existing document."""
  30. document = get_object_or_404(Document, pk=pk)
  31. if request.method == 'POST':
  32. # Pass the instance to the form to update it
  33. form = DocumentForm(request.POST, instance=document)
  34. if form.is_valid():
  35. form.save()
  36. return redirect('document_detail', pk=document.pk)
  37. else:
  38. # Pre-populate the form with the existing document's data
  39. form = DocumentForm(instance=document)
  40. return render(request, 'textdocs/document_form.html', {'form': form})
  41. # --- NEW: View for deleting a document ---
  42. def document_delete(request, pk):
  43. """Handles the deletion of a document after confirmation."""
  44. document = get_object_or_404(Document, pk=pk)
  45. if request.method == 'POST':
  46. # This is after the user confirms the deletion
  47. document.delete()
  48. return redirect('document_list') # Redirect to the list after deletion
  49. # If it's a GET request, show the confirmation page
  50. return render(request, 'textdocs/document_confirm_delete.html', {'document': document})
  51. def generate_pdf(request, pk):
  52. """Generates a PDF for a specific document."""
  53. document = get_object_or_404(Document, pk=pk)
  54. html_string = render_to_string('textdocs/document_pdf.html', {'document': document})
  55. html = HTML(string=html_string, base_url=request.build_absolute_uri())
  56. pdf = html.write_pdf()
  57. response = HttpResponse(pdf, content_type='application/pdf')
  58. response['Content-Disposition'] = f'attachment; filename="{document.title}.pdf"'
  59. return response