Skip to content

Commit 3e7e4a8

Browse files
committed
added async rendering methods
these are supposed to be used in views, can not work in templates for now
1 parent 77e57cd commit 3e7e4a8

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

django_async_extensions/aforms/models.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44

55
from django.forms.models import ModelForm
66

7+
from django_async_extensions.aforms.utils import AsyncRenderableFormMixin
78

8-
class AsyncModelForm(ModelForm):
9+
10+
class AsyncModelForm(AsyncRenderableFormMixin, ModelForm):
911
@classmethod
1012
async def from_async(cls, *args, **kwargs):
1113
return await sync_to_async(cls)(*args, **kwargs)
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from asgiref.sync import sync_to_async
2+
3+
from django.utils.safestring import mark_safe
4+
5+
6+
class AsyncRenderableMixin:
7+
async def arender(self, template_name=None, context=None, renderer=None):
8+
renderer = renderer or self.renderer
9+
template = template_name or self.template_name
10+
context = context or self.get_context()
11+
return mark_safe( # noqa:S308
12+
await sync_to_async(renderer.render)(template, context)
13+
)
14+
15+
16+
class AsyncRenderableFormMixin(AsyncRenderableMixin):
17+
async def aas_p(self):
18+
"""Render as <p> elements."""
19+
return await self.arender(self.template_name_p)
20+
21+
async def aas_table(self):
22+
"""Render as <tr> elements excluding the surrounding <table> tag."""
23+
return await self.arender(self.template_name_table)
24+
25+
async def aas_ul(self):
26+
"""Render as <li> elements excluding the surrounding <ul> tag."""
27+
return await self.arender(self.template_name_ul)
28+
29+
async def aas_div(self):
30+
"""Render as <div> elements."""
31+
return await self.arender(self.template_name_div)

0 commit comments

Comments
 (0)