2023-01-02 23:06:00 +01:00
|
|
|
from django.contrib.sites.shortcuts import get_current_site as django_get_current_site
|
2023-01-03 17:00:07 +01:00
|
|
|
from django.db.models import Model
|
|
|
|
from django.http import HttpRequest
|
|
|
|
from django.http import HttpResponse
|
|
|
|
from zen_queries import render
|
2023-01-02 23:06:00 +01:00
|
|
|
|
|
|
|
|
|
|
|
def base_view_context(request):
|
|
|
|
"""Include the current site in the context."""
|
|
|
|
return {"site": django_get_current_site(request)}
|
2023-01-03 17:00:07 +01:00
|
|
|
|
|
|
|
|
|
|
|
def render_list(
|
|
|
|
request: HttpRequest,
|
|
|
|
objects: list["Model"],
|
|
|
|
columns: list[tuple[str, str]],
|
|
|
|
) -> HttpResponse:
|
|
|
|
# TODO: Actions per object
|
|
|
|
# TODO: Listwide actions
|
|
|
|
|
|
|
|
object_rows = [[getattr(obj, column[0]) for column in columns] for obj in objects]
|
|
|
|
|
|
|
|
column_labels = [column[1] for column in columns]
|
|
|
|
|
|
|
|
context = base_view_context(request) | {
|
|
|
|
"object_rows": object_rows,
|
|
|
|
"columns": column_labels,
|
|
|
|
}
|
|
|
|
|
|
|
|
return render(
|
|
|
|
request=request,
|
|
|
|
template_name="utils/list.html",
|
|
|
|
context=context,
|
|
|
|
)
|