Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 18, 2013 12:24:57

[NK]_Jezz
От:
Зарегистрирован: 2012-03-05
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Calendar/event iteration/tamplates

Есть задача в которую входит создание бесконечного календаря который можно листать вперёд и назад. В этом календаре есть возможность просмотра созданных событий, у события есть несколько полей главное из которых iteration. Повторение события можно сделать каждый день, каждую неделю, каждый месяц и каждый год.
views.py

def show(request, year, month):
clndr = calendar.monthcalendar(int(year), int(month))
event = Event.objects.filter(date__year=int(year), date__month=int(month))
# Next month
if int(month) == 12:
next_year = int(year) + 1
next_month = 1
else:
next_year = int(year)
next_month = int(month) + 1
# Previous month
if int(month) == 1:
prev_year = int(year) - 1
prev_month = 12
else:
prev_year = int(year)
prev_month = int(month) - 1
return render(request, '_calendar/index.html',
{'calendar': clndr,
'event': event,
'next_year': next_year,
'next_month': next_month,
'prev_year': prev_year,
'prev_month': prev_month})
Код шаблона
{% extends "base.html" %}
{% block content %}
<a href="{% url show prev_year prev_month %}">Previous month</a>
<a href="{% url show next_year next_month %}">Next month</a>
<table border='1'>
{% for week in calendar%}
<tr>
{% for day in week %}
{% if day = 0 %}
<td></td>
{% else %}
<td class="td">{{ day }}
{% for row in event %}
{% if row.date.day = day %}
<br>{{ row.title }} {{ row.time }}
{% endif %}
{% endfor %}
</td>
{% endif %}
{% endfor %}
</tr>
{% endfor %}
</table>
{% endblock %}
from django.db import models

TITLE_CHOICES = (
('None', 'none'),
('Day', 'day'),
('Week', 'week'),
('Month', 'month'),
('Year', 'year'),
)


class Event(models.Model):
user = models.CharField(max_length=30)
title = models.CharField(max_length=60)
date = models.DateField(unique=True)
time = models.TimeField(blank=True)
iteration = models.CharField(max_length=5, choices=TITLE_CHOICES)
Подскажите как организовать повторение в шаблоне или какой-то другой метод, буду очень рад даже просто совету!



Офлайн

#2 Окт. 18, 2013 19:34:23

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Calendar/event iteration/tamplates

{% if day = 0 %}
{% if row.date.day = day %}

И что, работает???
if tags may also use the operators ==, !=, <, >, <=, >= and in which work as follows:
нет там такого оператора =



Офлайн

#3 Окт. 18, 2013 22:36:30

[NK]_Jezz
От:
Зарегистрирован: 2012-03-05
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Calendar/event iteration/tamplates

В шаблонах работает, там видимо не принципиально!
Изменил вьюху на такой вариант, но не придумал как более или менее элегантно сделать повторение на каждый день, и на неделю!

def show(request, year, month):
clndr = calendar.monthcalendar(int(year), int(month))
days = {}
length = len(clndr)
for x in range(length):
for y in clndr[x]:
days[y] = None
event = Event.objects.filter(date__year=int(year), date__month=int(month))
iter_month = Event.objects.filter(iteration='month')
iter_year = Event.objects.filter(iteration='year', date__month=int(month))
event_list = list(chain(event, iter_month, iter_year))
for row in event_list:
days[row.date.day] = row
# iter_week = Event.objects.filter(iteration='week')
# iter_day = Event.objects.filter(iteration='day')
# Next month
if int(month) == 12:
next_year = int(year) + 1
next_month = 1
else:
next_year = int(year)
next_month = int(month) + 1
# Previous month
if int(month) == 1:
prev_year = int(year) - 1
prev_month = 12
else:
prev_year = int(year)
prev_month = int(month) - 1

return render(request, '_calendar/index.html',
{'calendar': clndr,
'next_year': next_year,
'next_month': next_month,
'prev_year': prev_year,
'prev_month': prev_month,
'days': days})



Отредактировано [NK]_Jezz (Окт. 18, 2013 22:37:59)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version