Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как в django вывести несколько "views"? ... на одном url 
:(
    Опции темы
Extractorrrr
Дата 1.3.2009, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 1.3.2009

Репутация: нет
Всего: нет



Всем привет!

Прочитал я официальный туториал, потом 4 первых раздела djangobook. 

И тут возник вопрос: а как сделать так, чтобы несколько views выводить по одному и тому же url в разных частях страницы?
Например, на всех страницах выводить хедер сверху, слева менюшку и еще чего-нибудь. 

Хочу нечто, подобное модулям joomla.

А то в примерах туториала на один урл приходится вывод только одной какой-то функции.
PM MAIL   Вверх
Daevaorn
Дата 1.3.2009, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 3
Всего: 70



Цитата(Extractorrrr @  1.3.2009,  21:31 Найти цитируемый пост)
И тут возник вопрос: а как сделать так, чтобы несколько views выводить по одному и тому же url в разных частях страницы?

view возвращает уже готовый http ответ. Т.е. вся логика построения страницы должна быть выполнена до того как view вернет этот ответ.
Цитата(Extractorrrr @  1.3.2009,  21:31 Найти цитируемый пост)
А то в примерах туториала на один урл приходится вывод только одной какой-то функции. 

По другому и быть  не может.
Цитата(Extractorrrr @  1.3.2009,  21:31 Найти цитируемый пост)
Например, на всех страницах выводить хедер сверху, слева менюшку и еще чего-нибудь. 

Для этого используются либо контекст процессоры, либо специальные теги. Ну или в крайнем случае можно вызывать из каждого view какие-то общие функции.
PM MAIL WWW   Вверх
Extractorrrr
Дата 2.3.2009, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 1.3.2009

Репутация: нет
Всего: нет



Цитата(Daevaorn @ 1.3.2009,  20:49)

Для этого используются либо контекст процессоры, 

Можно более "разжеванный" материал по контекст процессорам?  Или пример кода, где был бы вывод на странице оглавления статей, текста текущей (в зависимости от урла) статьи и опроса (который бы выводился по любому адресу).
Цитата(Daevaorn @ 1.3.2009,  20:49)

 либо специальные теги. 

Пока лучшая идея из того, что мне приходит, как можно сделать с помощью тегов - соорудить большой шаблон, в котором выводятся все данные сразу (имя залогиненного пользователя, оглавление, опрос, еще чего-нибудь), а потом в каждом view сгребать данные в кучу для передачи в шаблон... 
Цитата(Daevaorn @ 1.3.2009,  20:49)

Ну или в крайнем случае можно вызывать из каждого view какие-то общие функции.

Хм... Как-то через *опу получается... Может, фреймворк позволяет красивее задачу решить? 
PM MAIL   Вверх
Daevaorn
Дата 3.3.2009, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 3
Всего: 70



Цитата(Extractorrrr @  2.3.2009,  21:00 Найти цитируемый пост)
Или пример кода, где был бы вывод на странице оглавления статей, текста текущей (в зависимости от урла) статьи и опроса (который бы выводился по любому адресу).

Ту следует использовать сразу и контекст процессор и кастомный тег.

Чтобы всегда были доступны статьи пусть будет контекст процессор (хотя можно и inclusion tag):
Код

def articles_globals(request):
    return {
      "articles": Article.objects.all()
   }

Тег для опроса:
Код

@register.inclusion_tag("poll.html")
def poll():
    return {
        "question": Question.objects.all().order_by("?")[0]
    }

Вьюха вывода статьи:
Код

def article(request, id):
    return render_to_response("article.html", {"current_article": Article.objects.get(pk=id)})

Ну и сам шаблон.
Код

<ul>
   {% for article in articles %}
      <li><a href="{{article.get_absolute_url}}" {% ifequal article current_article %}id="current"{% endifequal %}>{{article}}</a></li>
   {% endfor %}
</ul>
<div>
   {% poll %}
</div>
<div>
   <p>{{current_article}}</p>
   <p>{{current_artcile.text}}</p>
</div>


В итоге и опрос и список статей могут быть использованы на любой странице.


Цитата(Extractorrrr @  2.3.2009,  21:00 Найти цитируемый пост)

Пока лучшая идея из того, что мне приходит, как можно сделать с помощью тегов - соорудить большой шаблон, в котором выводятся все данные сразу (имя залогиненного пользователя, оглавление, опрос, еще чего-нибудь), а потом в каждом view сгребать данные в кучу для передачи в шаблон..

Вам следует больше поизучать материал.


Цитата(Extractorrrr @  2.3.2009,  21:00 Найти цитируемый пост)
Хм... Как-то через *опу получается... Может, фреймворк позволяет красивее задачу решить?  

Он позволяет её решить по разному, исходя из конкретной ситуации.

Это сообщение отредактировал(а) Daevaorn - 3.3.2009, 12:44
PM MAIL WWW   Вверх
Extractorrrr
Дата 3.3.2009, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 1.3.2009

Репутация: нет
Всего: нет



Daevaorn, 
спасибо, идею понял!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Веб-разработка и фреймворки | Следующая тема »


 




[ Время генерации скрипта: 0.0437 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.