Django шаблон контекста нескольких просмотров - PullRequest
4 голосов
/ 31 декабря 2011

Я использую Idios, приложение для профилей , и я хотел бы сделать профили в моем приложении поверх idios (то есть сохранять idios pip-устанавливаемыми без изменения самого приложения).

Проблема в том, что представление профиля написано в приложении idios с использованием объектно-ориентированного подхода передачи переменных контекста и отображения этого представления в шаблоне. Я хочу, чтобы представление профиля также включало список друзей пользователя, управляемый отдельным приложением друзей. Я получил подтверждение концепции, просто импортировав друзей в Idios и обновив контекст новой переменной friend_list, и добавив еще один блок шаблона для отображения списка друзей.

Итак, каков наилучший или наиболее разумный подход к объединению списка друзей и профиля без изменения приложения idios? Этот вопрос в основном является просьбой о помощи, чтобы действительно понять систему MVT в Django в СУХОЙ манере, которая поддерживает повторно используемые приложения.

Ответы [ 3 ]

3 голосов
/ 31 декабря 2011

К счастью, упомянутое приложение использует представления на основе классов, и это преимущество, которое вы получаете от использования представлений на основе классов.Чтобы изменить контекст, вы просто создаете подкласс их представления профиля:

yourapp / views.py

from idios.views import ProfileDetailView

class MyProfileDetailView(ProfileDetailView):
    def get_context_data(self, **kwargs):
        context = super(MyProfileDetailView, self).get_context_data(**kwargs)

        # get the list of friends and store it in a new key in `context`

        return context

Затем просто переопределите идиосы urlpattern, используемые:default в вашем urls.py (нужно перейти до включения идиос urlpatterns) и указать его вместо своего подкласса

Наконец, чтобы переопределить использование шаблонных идиос, создав файл idios/whatever_template.html в вашем проекте (илиприложение) templates каталог.Скопируйте шаблон по умолчанию и измените по желанию.Вам вообще не нужно прикасаться к оригинальному источнику благодаря всем доступным Django переопределениям.

1 голос
/ 31 декабря 2011

Вы сможете сделать это, создав подкласс класса ProfileDetailView из idios в приложении в своем проекте, добавив дополнительный контекст для друзей этого пользователя. Как то так:

import idios.views

class ProfileDetailView(idios.views.ProfileDetailView):

    def get_context_data(self, **kwargs):
        context = super(ProfileDetailView, self).get_context_data(**kwargs)
        context['friends'] = get_friends(self.page_user)  # Or however it works
        return context

Затем вы можете использовать этот подкласс в качестве представления в вашем проекте.

0 голосов
/ 31 декабря 2011

Если вы считаете, что хотите включить друзей пользователя в другие представления, СУХОЙ способ - создать пользовательский шаблонный тег или фильтр . Тогда вам просто нужно переопределить шаблон и включить туда свой тег / фильтр шаблона.

Если вы хотите отображать только друзей пользователя в этом конкретном представлении, я бы переопределил get_context_data, как описано в других ответах.

...