A django app based on js-year-calendar
Dynamic view implemented with Bootstrap 5 and JS Fetch API (no jquery); popups are not supported, they are replaced by a modal component.
Clone the repository or download the project
Optional: set a django environnement, then activate
python -m venv venv
venv\Scripts\activate.bat (windows)
. venv/bin/activate (linux)
pip install django
Install django_year_calendar (or give an access)
pip install django-year-calendar
# or
python setup.py install
# or put current directory in PYTHONPATH
Go to the example django project, initialize the project then run dev server
cd example_project
python manage.py migrate
python manage.py loaddata sample_data.json
python manage.py runserver
Check then http://localhost:8000
You can also go to the admin panel http://localhost:8000/admin (login admin passwd admin) to browse models and add some more data.
Add the django_year_app to your project
INSTALLED_APPS = [
...
'django_year_calendar',
]
Add some routes to views in the urls.py file
urlpatterns = [
...
path('my_calendar', include('django_year_calendar.urls')),
path('minimal_fr', TemplateView.as_view(template_name='django_year_calendar/minimal.html',
extra_context = {'calendar_lang': 'fr'})),
...
]
You may (or not) add some settings in your settings.py file:
CALENDAR_LANG = "fr" # see https://github.com/year-calendar/js-year-calendar/tree/master/locales
CALENDAR_WEEKSTART = 1 # monday
CALENDAR_WEEKNUMBER = True # display week number
CALENDAR_TPL = "django_year_calendar/bootstrap5"
# style: 'border' | 'background' | [custom_template] for 'custom' style
CALENDAR_RENDERER = 'background'
CALENDAR_VIEWS = [
# place background display view(s) first
...
{ 'manager': 'app.models.MyModel[.myManager[.a_method]]' [, 'border':True] [, 'force_color': 'PaleGreen'] },
# manager: name of an object that generates events (see MyEvent below)
# border: set to True to force border type display (overrides the event style() method)
# force_color: forces event color display (overrides the event color() method)
...
]
Add some code to the models to display on the calendar,
class MyEvent(models.Model, EventMixin): # without EventMixin, advanced features will not be available
...
# REQUIRED
def start_date(self) -> DateField | date :
...
return some_date
# REQUIRED
def end_date(self):
...
return another_date
# optional
def color(self) -> str:
return 'blue' # https://www.w3.org/wiki/CSS/Properties/color/keywords
def style(self) -> str ('background' | 'border' ):
return 'border'
You can make your own views in various ways depending on your needs:
- new templates based on the provided ones in django_year_calendar/templates
- parameters in the urls.py file
- new views based on CalendarView provided by the django_year_calendar app
See example_project for more details.
- Customizing the calendar view based on user rights
- Helpers for building event editing views
- ...