Add single page
This commit is contained in:
parent
b8b101b466
commit
209adf66f7
3
TODO
3
TODO
@ -1,3 +1,4 @@
|
|||||||
- Single talk.
|
- Component link with scroll up
|
||||||
|
- Search
|
||||||
- List profiles
|
- List profiles
|
||||||
- Chat
|
- Chat
|
@ -1,12 +1,12 @@
|
|||||||
import json
|
import json
|
||||||
from channels.generic.websocket import AsyncWebsocketConsumer
|
from channels.generic.websocket import AsyncWebsocketConsumer
|
||||||
from asgiref.sync import sync_to_async
|
from asgiref.sync import sync_to_async
|
||||||
from .views import page_talks, page_about
|
from .views import page_talks, page_about, page_single_talk
|
||||||
|
|
||||||
|
|
||||||
class WebsiteConsumer(AsyncWebsocketConsumer):
|
class WebsiteConsumer(AsyncWebsocketConsumer):
|
||||||
|
|
||||||
async def connect(self):
|
async def connect(self):
|
||||||
'''Connect user'''
|
"""Connect user"""
|
||||||
self.room_name = self.scope["url_route"]["kwargs"]["room_id"]
|
self.room_name = self.scope["url_route"]["kwargs"]["room_id"]
|
||||||
self.room_group_name = "root_%s" % self.room_name
|
self.room_group_name = "root_%s" % self.room_name
|
||||||
|
|
||||||
@ -22,11 +22,11 @@ class WebsiteConsumer(AsyncWebsocketConsumer):
|
|||||||
{
|
{
|
||||||
"type": "send_page_talks",
|
"type": "send_page_talks",
|
||||||
"page": 1,
|
"page": 1,
|
||||||
}
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
async def disconnect(self, close_code):
|
async def disconnect(self, close_code):
|
||||||
''' Cliente se desconecta '''
|
"""Cliente se desconecta"""
|
||||||
# Leave room group
|
# Leave room group
|
||||||
await self.channel_layer.group_discard(self.room_group_name, self.channel_name)
|
await self.channel_layer.group_discard(self.room_group_name, self.channel_name)
|
||||||
|
|
||||||
@ -45,15 +45,20 @@ class WebsiteConsumer(AsyncWebsocketConsumer):
|
|||||||
{
|
{
|
||||||
"type": "send_page_talks",
|
"type": "send_page_talks",
|
||||||
"page": page,
|
"page": page,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
# Single talk
|
||||||
|
if data["value"] == "single-talk":
|
||||||
|
await self.channel_layer.group_send(
|
||||||
|
self.room_group_name, {
|
||||||
|
"type": "send_page_single_talk",
|
||||||
|
"id": data["id"],
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
# About
|
# About
|
||||||
if data["value"] == "about":
|
if data["value"] == "about":
|
||||||
await self.channel_layer.group_send(
|
await self.channel_layer.group_send(
|
||||||
self.room_group_name,
|
self.room_group_name, {"type": "send_page_about"}
|
||||||
{
|
|
||||||
"type": "send_page_about"
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# Pages
|
# Pages
|
||||||
@ -62,14 +67,22 @@ class WebsiteConsumer(AsyncWebsocketConsumer):
|
|||||||
return page_talks(page=page)
|
return page_talks(page=page)
|
||||||
|
|
||||||
async def send_page_talks(self, event):
|
async def send_page_talks(self, event):
|
||||||
''' Send Home page '''
|
"""Send Home page"""
|
||||||
html = await sync_to_async(self._get_talks)(event["page"])
|
html = await sync_to_async(self._get_talks)(event["page"])
|
||||||
await self.send(text_data=html)
|
await self.send(text_data=html)
|
||||||
|
|
||||||
|
def _get_single_talk(self, id):
|
||||||
|
return page_single_talk(id)
|
||||||
|
|
||||||
|
async def send_page_single_talk(self, event):
|
||||||
|
"""Send Single talk page"""
|
||||||
|
html = await sync_to_async(self._get_single_talk)(event["id"])
|
||||||
|
await self.send(text_data=html)
|
||||||
|
|
||||||
def _get_about(self):
|
def _get_about(self):
|
||||||
return page_about()
|
return page_about()
|
||||||
|
|
||||||
async def send_page_about(self, event):
|
async def send_page_about(self, event):
|
||||||
''' Send About page '''
|
"""Send About page"""
|
||||||
html = await sync_to_async(self._get_about)()
|
html = await sync_to_async(self._get_about)()
|
||||||
await self.send(text_data=html)
|
await self.send(text_data=html)
|
@ -3,5 +3,5 @@ from django.urls import re_path
|
|||||||
from . import consumers
|
from . import consumers
|
||||||
|
|
||||||
websocket_urlpatterns = [
|
websocket_urlpatterns = [
|
||||||
re_path(r'ws/pages/(?P<room_id>\w+)/$', consumers.WebsiteConsumer),
|
re_path(r"ws/pages/(?P<room_id>\w+)/$", consumers.WebsiteConsumer),
|
||||||
]
|
]
|
22
app/website/templates/pages/talk-single.html
Normal file
22
app/website/templates/pages/talk-single.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<main id="main">
|
||||||
|
<article>
|
||||||
|
<header>
|
||||||
|
<p>
|
||||||
|
<img width="200" src="{{ talk.image.url }}">
|
||||||
|
</p>
|
||||||
|
<h2>{{ talk.title }}</h2>
|
||||||
|
</header>
|
||||||
|
<p>
|
||||||
|
{{ talk.content }}
|
||||||
|
</p>
|
||||||
|
<footer>Author {{ talk.author.full_name }} - {{ talk.category.name }}</footer>
|
||||||
|
</article>
|
||||||
|
<p>
|
||||||
|
<form>
|
||||||
|
<input type="hidden" name="action" value="page">
|
||||||
|
<input type="hidden" name="value" value="talks">
|
||||||
|
<input type="hidden" name="page" value="1">
|
||||||
|
<a href="#" hx-ws="send" hx-trigger="click">Back</a>
|
||||||
|
</form>
|
||||||
|
</p>
|
||||||
|
</main>
|
@ -1,21 +1,26 @@
|
|||||||
<main id="main">
|
<main id="main">
|
||||||
{% for talk in talks %}
|
{% for talk in talks %}
|
||||||
<a href="#">
|
<form>
|
||||||
<article>
|
<input type="hidden" name="action" value="page">
|
||||||
<header>
|
<input type="hidden" name="value" value="single-talk">
|
||||||
<div class="grid">
|
<input type="hidden" name="id" value="{{ talk.id }}">
|
||||||
<p>
|
<a href="#" hx-ws="send" hx-trigger="click">
|
||||||
<img width="200" src="{{ talk.image.url }}">
|
<article>
|
||||||
</p>
|
<header>
|
||||||
<h2>{{ talk.title }}</h2>
|
<div class="grid">
|
||||||
</div>
|
<p>
|
||||||
</header>
|
<img width="200" src="{{ talk.image.url }}">
|
||||||
<p>
|
</p>
|
||||||
{{ talk.content|truncatechars:150 }}
|
<h2>{{ talk.title }}</h2>
|
||||||
</p>
|
</div>
|
||||||
<footer>Author {{ talk.author.full_name }} - {{ talk.category.name }}</footer>
|
</header>
|
||||||
</article>
|
<p>
|
||||||
</a>
|
{{ talk.content|truncatechars:150 }}
|
||||||
|
</p>
|
||||||
|
<footer>Author {{ talk.author.full_name }} - {{ talk.category.name }}</footer>
|
||||||
|
</article>
|
||||||
|
</a>
|
||||||
|
</form>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{# Pagination #}
|
{# Pagination #}
|
||||||
<div class="loading" >
|
<div class="loading" >
|
||||||
|
@ -8,20 +8,35 @@ from asgiref.sync import sync_to_async
|
|||||||
|
|
||||||
def index(request):
|
def index(request):
|
||||||
"""Render layout page"""
|
"""Render layout page"""
|
||||||
return render(request, "layouts/base.html", {
|
return render(
|
||||||
"room_random": randint(1000000, 9999999),
|
request,
|
||||||
"DOMAIN": settings.DOMAIN,
|
"layouts/base.html",
|
||||||
})
|
{
|
||||||
|
"room_random": randint(1000000, 9999999),
|
||||||
|
"DOMAIN": settings.DOMAIN,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def page_talks(page=1):
|
def page_talks(page=1):
|
||||||
TALK_PER_PAGE = 5
|
TALK_PER_PAGE = 5
|
||||||
return render_to_string("pages/talks.html",
|
return render_to_string(
|
||||||
{
|
"pages/talks.html",
|
||||||
"talks": Talk.objects.order_by("title")[:TALK_PER_PAGE * page],
|
{
|
||||||
"page": page,
|
"talks": Talk.objects.order_by("title")[: TALK_PER_PAGE * page],
|
||||||
"next_page": page + 1,
|
"page": page,
|
||||||
})
|
"next_page": page + 1,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def page_single_talk(id):
|
||||||
|
return render_to_string(
|
||||||
|
"pages/talk-single.html",
|
||||||
|
{
|
||||||
|
"talk": Talk.objects.get(id=id),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def page_about():
|
def page_about():
|
||||||
|
Loading…
Reference in New Issue
Block a user