Форум сайта python.su
Есть view, которое получает из урл http://www.example.com/2014/05/03/ дату:
И генерирует ссылку current_date на запрошенный url и генерирует ссылку
tomorrow_date на завтрашний день. Также есть некоторая логика, которую
обрабатывает из даты урл:
def to_date(request, year, month, day): day = int(day) month = int(month) year = int(year) current_date = '{year}{month}{day}'.format(year=year, month=date.month, day=date.day) next_date = datetime(year, month, day) + timedelta(days=1) tomorrow_date = '{year}{month}{day}'.format(year=next_date.year, month=next_date.month, day=next_date.day) # Any logic: # ...do_something template = loader.get_template('content.html') context = RequestContext(request, { 'current_date': current_date, 'tomorrow_date': tomorrow_date, #'do_something': do_something, }) return HttpResponse(template.render(context))
Офлайн
to_night
{% url "view_name" 1 object.3 "fff"%}
Офлайн
Singularity
to_night
{% url “view_name” 1 object.3 “fff”%}
Офлайн
Давайте разобьём задачу на простые и понятные этапы. Даты, завтра - послезавтра, конкретные моменты, относящиеся к Вашей текущей программе не интересны. Итак, поэтапно, что не получается на первом шаге?
Офлайн
Функция генерирует некоторые данные и меню исходя из урл (случайном). И отдает шаблон content.html, содержащий menu и content. Хочу разделить на две функции get_content get_menu. Проблема: как их разделить, если данные они получают с одного url, а отдают в разные шаблоны?
Офлайн
Итак, вопрос “Нужно логику разделить на две функции”
Ответ:
def f1(request): return response def f2(request): return response def common(request): if condition: return f1(request) return f2(request)
Офлайн
Вопрос 2. Как на один url отдавать две функции сразу? Спасибо.
Офлайн
to_nightКлиент (html-страница во вкладке браузера) ожидает одного ответа на один запрос, после которого, он (в классическом варианте) обновляет содержимое страницы содержимым ответа. Как Вы представляете себе работу веб-приложения, которое на один реквест возвращает несколько респонзов?
Вопрос 2. Как на один url отдавать две функции сразу? Спасибо.
Офлайн
Если я правильно понял вашу задачу, то вы хотите:
1. В шапке выводить ссылки с датой сегодня/завтра.
2. В теле страницы выводить некий контент.
3. Вынести шапку в отдельный шаблон.
Тогда вы можете:
1. Передать дату в контексте шаблона и использовать тег %url. Читайте документацию: https://docs.djangoproject.com/en/dev/ref/templates/builtins/#url Там есть примеры. Вам все равно придется использовать одну view функцию, если вы хотите, она может вызывать другую, но шаблонизатор будет вызывать только одна из них, а вызываемый шаблон будет вызывать другие, подключаемые шаблоны и шаблонные теги. Передать в них напрямую ничего не получится, если вы об этом.
2. Сделать это через JS, как вариант.
Офлайн
Вынес меню в отдельный template tag, беру данные из request, вставляю {% days_menu %} в любом месте, теперь оно не связанно с view.
@register.inclusion_tag('menu.html', takes_context=True) def days_menu(context): request = context['request'] date_list = request.path.split('/') day = int(date_list[3]) month = int(date_list[2]) year = int(date_list[1]) previews_date = datetime(year, month, day) - timedelta(days=1) previews_day = '%02d' % previews_date.day previews_month = '%02d' % previews_date.month yesterday_link = '/{year}/{month}/{day}/'.format(year=previews_date.year, month=previews_month, day=previews_day) next_date = datetime(year, month, day) + timedelta(days=1) next_day = '%02d' % next_date.day next_month = '%02d' % next_date.month tomorrow_link = '/{year}/{month}/{day}/'.format(year=next_date.year, month=next_month, day=next_day) now_day = datetime.today().day now_month = datetime.today().month now_year = datetime.today().year now_day = '%02d' % now_day now_month = '%02d' % now_month today_link = '/{year}/{month}/{day}/'.format(day=now_day, month=now_month, year=now_year) return {'tomorrow_link': tomorrow_link, 'today_link': today_link, 'yesterday_link': yesterday_link}
Офлайн