Здравствуйте, я начинающий в Django.
У меня есть календарь, который я хочу отображать на каждом сайте моей веб-страницы, поэтому я называю это {% include "tags/my_calendar.html" %}
в моем base.html.
Насколько я знаю, я могу либо отобразить календарь, создав собственный тег шаблона, либо использовать его в стандартном представлении Django. Я протестировал его в стандартном представлении Django, вызвав функцию календаря через urls.py, который работает нормально.
Но я не хочу, чтобы календарь отображался только для специального URL.
Так что я могу сделать это, определив пользовательский тег шаблона?
Я пробовал это до сих пор:
from django import template
register = template.Library()
@register.inclusion_tag("tags/my_calendar.html")
def calendar():
"""
Show calendar of events for specified month and year
"""
lToday = datetime.now()
lYear = lToday.year
lMonth = lToday.month
my_workouts = ContestEvent.objects.filter(id__year=lYear, id__month=lMonth)
lCalendar = WorkoutCalendar(my_workouts).formatmonth(lYear, lMonth)
return {'calendar': mark_safe(lCalendar)}
Я переопределяю класс HTMLCalender следующим образом, и все это работает со стандартным представлением Django, как упомянуто выше, но возвращает render_to_response:
class WorkoutCalendar(HTMLCalendar):
def __init__(self, workouts):
super(WorkoutCalendar, self).__init__()
# self.workouts = self.group_by_day(workouts)
def formatday(self, day, weekday):
if day != 0:
cssclass = self.cssclasses[weekday]
if date.today() == date(self.year, self.month, day):
cssclass += ' today'
return self.day_cell(cssclass, day)
return self.day_cell('noday', ' ')
def formatmonth(self, year, month):
self.year, self.month = year, month
return super(WorkoutCalendar, self).formatmonth(year, month)
def day_cell(self, cssclass, body):
return '<td class="%s">%s</td>' % (cssclass, body)
Мой \ tags \ my_calendar.html выглядит так:
{% load calendar_tag %}
<div>
{% calendar %}
</div
Что я делаю по существу неправильно? Я получил следующую ошибку:
Request Method: GET
Request URL: http://127.0.0.1:8000/de/
Exception Type: TemplateSyntaxError
Exception Value:
Caught an exception while rendering: maximum recursion depth exceeded
update1
С подсказкой Daniel Roseman , чтобы использовать переменный синтаксис {{ calendar }}
вместо синтаксиса тега {% calendar %}
Я избавился от ошибки рекурсии, но мой календарь все еще не отображается. Я провожу много расследований.
Что здесь не так?
Update2
после некоторого исследования я нашел это краткое описание о том, как использовать пользовательский тег шаблона.
Ошибка, из-за которой календарь не появился, состояла в том, что я вызывал {% include "tags/my_calendar.html" %}
в base.html вместо вызова функции моего тега как {% calendar <parameter> %}
. Принимая во внимание, что мой шаблон тега был в порядке, что вызывает возвращаемое значение функции тега:
{{calendar}}