Skip to content

Commit 0a852a5

Browse files
committed
feat: Add htmx
1 parent 3377c3f commit 0a852a5

File tree

8 files changed

+89
-50
lines changed

8 files changed

+89
-50
lines changed

.env

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
DJANGO_SETTINGS_MODULE=config.settings.local
22
PYTHONBREAKPOINT=pudb.set_trace
3-
DATABASE_URL=psql://postgres:postgres@localhost:5432/django-wtf
3+
DATABASE_URL=psql://postgres:postgres@localhost:5432/django_wtf
44
REDIS_URL=redis://localhost:6379/
55
CELERY_BROKER_URL=$REDIS_URL
66
DJANGO_SETTINGS_MODULE=config.settings.local

config/settings/base.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@
9191
"django_json_ld",
9292
"django_custom_error_views",
9393
"django_admin_shellx",
94+
"django_htmx",
9495
"health_check",
9596
"meta",
9697
"modelcluster",
@@ -181,6 +182,7 @@
181182
"django_user_agents.middleware.UserAgentMiddleware",
182183
"django.middleware.common.BrokenLinkEmailsMiddleware",
183184
"django.middleware.clickjacking.XFrameOptionsMiddleware",
185+
"django_htmx.middleware.HtmxMiddleware",
184186
# TODO: What does this do?
185187
"watson.middleware.SearchContextMiddleware",
186188
"wagtail.contrib.redirects.middleware.RedirectMiddleware",

django_wtf/core/search_view.py

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,45 @@
22
from watson.views import SearchView as OriginalSearchView
33

44
from django_wtf.core.models import Repository
5+
from django_wtf.core.models.category_model import Category
56

67

78
class SearchView(OriginalSearchView):
8-
template_name = "core/search.html"
99
paginate_by = 20
1010
models = (Repository,)
1111

12+
def get_template_names(self): # pyright: ignore [reportIncompatibleMethodOverride]
13+
if self.request.htmx:
14+
template_name = "core/search_table.html"
15+
else:
16+
template_name = "core/search.html"
17+
18+
return [template_name]
19+
1220
def get_queryset(self):
1321
repositories = Repository.valid.all()
14-
return watson.filter(repositories, self.query)
22+
23+
category = self.request.GET.get("category", None)
24+
if category and category != "All":
25+
repositories = repositories.filter(categories__name=category)
26+
27+
search = self.request.GET.get("q", None)
28+
if search:
29+
repositories = watson.filter(repositories, search)
30+
return repositories
31+
32+
def categories_ordered_by_total_repositories(self):
33+
categories = []
34+
for c in Category.objects.all():
35+
count_matching_repositories = Repository.objects.filter(
36+
categories__in=[c]
37+
).count()
38+
if count_matching_repositories:
39+
setattr(c, "total_repositories", count_matching_repositories)
40+
categories.append(c)
41+
return sorted(categories, key=lambda c: c.total_repositories, reverse=True)
1542

1643
def get_context_data(self, **kwargs):
1744
ctx = super().get_context_data(**kwargs)
45+
ctx["categories"] = self.categories_ordered_by_total_repositories()
1846
return ctx

django_wtf/core/views/index_view.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from django.templatetags.static import static
22
from django.views.generic.base import TemplateView
33
from meta.views import MetadataMixin
4+
from watson import search as watson
45

56
from django_wtf.core.models import Category, Repository, SocialNews
67
from django_wtf.core.queries import (

django_wtf/templates/core/base.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{% load tailwind_tags %}
1+
{% load tailwind_tags django_htmx %}
22
<!DOCTYPE html>
33
<html lang="en-US">
44
<head>
@@ -40,5 +40,7 @@
4040
<script defer
4141
src="https://s.depode.com/ingress/7ca0f5ff-8ef2-45fb-9718-37d34cddfe79/script.js"></script>
4242
{% endif %}
43+
<script src="https://unpkg.com/[email protected]"></script>
44+
{% django_htmx_script %}
4345
</body>
4446
</html>
Lines changed: 33 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,39 @@
11
{% extends "core/base.html" %}
22
{% block content %}
3-
<div class="mb-3">
4-
{% for object in object_list %}
5-
<div class="mb-1 rounded">
6-
<div class="shadow-xl card bg-base-100">
7-
<div class="pb-2 card-body">
8-
<a target="_blank" href="{{ object.github_url }}">
9-
<h2 class="flex justify-between card-title">
10-
<span>{{ object.full_name }}</span>
11-
<span class="text-sm">⭐ {{ object.stars }}</span>
12-
</h2>
13-
</a>
14-
<p>
15-
{% for topic in object.topics|slice:"0:5" %}
16-
<a class="p-3 mr-1 text-xs badge badge-outline hover:brightness-125"
17-
href="{% url 'core:search' %}?q={{ topic }}">{{ topic|truncatechars:30 }}</a>
18-
{% endfor %}
19-
</p>
20-
<p class="mt-2">{{ object.description }}</p>
21-
</div>
3+
<div class="mb-5 w-full flex-col content-center self-center lg:mt-5 lg:flex lg:w-7/12">
4+
<form class="form flex justify-between">
5+
<label class="form-control">
6+
<div class="label">
7+
<span class="label-text">Search</span>
228
</div>
9+
<input type="text"
10+
name="q"
11+
value="{{ request.GET.q }}"
12+
class="input input-bordered input-sm min-w-64"
13+
hx-get="{% url 'core:search' %}"
14+
hx-target="#search_table"
15+
hx-trigger="keyup changed delay:1s"
16+
hx-push-url="true" />
17+
</label>
18+
<div class="flex gap-4">
19+
<label class="form-control">
20+
<div class="label">
21+
<span class="label-text">Category</span>
22+
</div>
23+
<select name="category"
24+
class="select select-bordered"
25+
hx-get="{% url 'core:search' %}"
26+
hx-target="#search_table"
27+
hx-trigger="change"
28+
hx-push-url="true">
29+
<option selected>All</option>
30+
{% for category in categories %}<option value="{{ category.name }}">{{ category.name }}</option>{% endfor %}
31+
</select>
32+
</label>
2333
</div>
24-
{% endfor %}
34+
</form>
35+
<table id="search_table" class="table table-sm mt-7">
36+
{% include "core/search_table.html" %}
37+
</table>
2538
</div>
2639
{% endblock content %}

poetry.lock

Lines changed: 18 additions & 26 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ django-waffle = "^4.1.0"
5454
django-admin-site-search = "^0.4.0"
5555
django-admin-shellx = "0.2.6"
5656
channels-redis = "^4.2.0"
57+
django-htmx = "^1.17.3"
5758

5859
[tool.poetry.group.dev.dependencies]
5960
pudb = "^2022.1.3"

0 commit comments

Comments
 (0)