• Wed. Apr 23rd, 2025

Dynamic web apps with HTMX, Python, and Django

Byadmin

Feb 13, 2025



$ python manage.py makemigrations
$ python manage.py migrate

The makemigrations command creates a new migration file if any schema changes are detected. (These are found in quoteapp/migrations, but you won’t typically need to interact with them directly.) The migrate command applies the changes.

Conflicts with schema changes
When several people make migration changes and then check them into version control, Django has mechanisms for addressing any version conflicts that may arise. See Django’s migrations documentation to learn more.

Constructing the view

Next up, let’s consider the view, which accepts a request and prepares the model (if necessary), and hands it off to be rendered as a response. We’ll only need one view, found at quoteapp/views.py:

// cat quoteapp/views.py
from django.shortcuts import render
from django.template.loader import render_to_string
from django.http import HttpResponse
from .models import Quote

def index(request):
if request.method == ‘POST’:
text = request.POST.get(‘text’)
author = request.POST.get(‘author’)
if text and author:
new_quote = Quote.objects.create(text=text, author=author)
# Render the new quote HTML
html = render_to_string(‘quoteapp/quote_item.html’, {‘quote’: new_quote})
return HttpResponse(html)
quotes = Quote.objects.all()
return render(request, ‘quoteapp/index.html’, {‘quotes’: quotes})

In this view, we import the Quote model and use it to craft a response in the index function. The request argument gives us access to all the information we need coming from the client. If the method is POST, we assemble a new Quote object and use Quote.objects.create() to insert it into the database. As a response, we send back just the markup for the new quote, because HTMX will insert it into the list on the front end.



Source link