HTMX + Django: Modern Python Web Apps, Hold the JavaScript Transcripts
Chapter: Surveying the non-JS-enabled Django app
Lecture: Project directory structure
Login or
purchase this course
to watch this video and the rest of the course contents.
0:00
The structure of VideoCollector is typical of a Django project. The project's name is VideoCollector, and that weird design decision from the Django
0:09
folks to have the configuration directory named the same as the project is present here. Inside the config directory you have the usual files.
0:18
In this course you'll be leaving the ASGI and WSGI files alone, as they're for putting
0:24
your project in production and I'll be sticking with the development server.
0:29
.py file is where you set Django's configuration. There are a few things that need to be changed
0:34
from their default values, particularly getting static files and template files configured.
0:39
I'll touch on those changes shortly, but the sample base project has those changes made already
0:44
if you're using it. Since the video collector project is small, I've been lazy and haven't
0:50
subdivided my URLs into sections, so all the pages in the site - yep, all four of them - are
0:56
configured in your urls.py. I'll review the route declarations with you before the end of this lesson.
1:03
As you can guess from the presence of db.sqlite3, I'm using SQLite to store all of the data.
1:12
You'll recall that static files are things like javascript, images, and css - files that are used
1:19
by your web pages that don't require the template engine. As I'm a little cdn adverse - nothing like
1:25
your site falling over because some CDN somewhere decided to stop hosting the file you need,
1:30
I've downloaded fontawesome.htmx and other things to be served here.
1:34
The CSS directory contains a couple of style files. The JavaScript directory contains bootstrap's
1:41
JavaScript files and eventually will also contain the HTMLX JavaScript file.
1:46
The image directory contains the category banner images. A more advanced version of the site would
1:53
allow you to upload those, but to keep it simple, adding a category means needing to change the code a tiny bit. And now for the rest of the code.
2:02
The logic for our project, that's fun to say, is in a Django app called ""content"". I'm horrible at naming the main app.
2:12
Utility apps that do things, no problem, but I never know what to call the central one.
2:16
I used to call it ""core"", but somebody pointed out there is a Django core and that's confusing.
2:21
I tried main for a while, but that implies it's the entry point like in a script, which it isn't, so here I'm calling it content.
2:29
With only 4 webpages, this app isn't terribly large. The data structure model files are in the usual models.py file, while the functions
2:38
that are the views for the 4 pages are in views.py. I won't be demoing it here, but admin.py has been written, so if you want to go and tinker
2:48
with the data directly, the admin models for each of the data models does exist.
2:52
The database file has been included in the git repo, so you don't need the fixture here,
2:58
but if you did want to start from scratch or had a strong desire to use a different database,
3:03
you could run the load data management command against this fixture to populate your database.
3:09
As I mentioned in lesson 2, this is a sister course for a Flask equivalent.
3:15
I stole Michael's data from the Flask version so I didn't have to create my own,
3:19
and there's a custom management command in here to feed the database from his JSON.
3:23
As you've got the fixture, you won't need it, but I left it there in case you're curious.
3:28
Every Django developer I've ever talked to has a different opinion on whether a template should
3:33
go with the app or not. I know that half of you watching this will be cranky with my decision.
3:39
Try to be forgiving. Generally, I only tend to put templates with an app if the app is one that
3:45
that I plan on being removable or is very self-contained. Otherwise, I use a single templates directory.
3:51
I find it easier to search for things this way, but understand that other coders do this differently. The templates directory has a base file
4:00
that all other files extend, containing the usual HTML boilerplate and a bunch of the bootstrap stuff. The other four files correspond
4:09
to the four pages of the site.