2013-04-18 17 views
5

Chciałbym wiedzieć, jak możemy "wywołać" aplikację z innej aplikacji. Zasadniczo mam, na przykład:Django: Jak zintegrować aplikację w innej aplikacji

  • aplikacja kalendarza, który ma pewien proces renderowania kalendarz w html
  • „main” aplikacja, która pokazuje index.html strony internetowej

Chciałbym, aby główna aplikacja wywoływała aplikację Kalendarz i wstawiała to, co renderuje na pasku bocznym.

Na przykład framework CodeIgniter może sobie z tym poradzić. Kontroler może wywołać inny kontroler, zapisuje to, co zwraca (dane wyjściowe html) w zmiennej, a na końcu uwzględnia tę zmienną w kontekście, który będzie używany do renderowania końcowego pliku HTML.

Czy to możliwe z Django? Dzięki

Odpowiedz

4

Myślę, że znalazłem rozwiązanie. Jestem nowy w Django, więc nie wiem, czy to dobry sposób na zrobienie tego, jeśli łamie jakieś konwencjonalne zasady, czy otwiera lukę bezpieczeństwa, czy po prostu istnieją inne lepsze metody, ale w każdym razie to działa ...

Stworzyłem więc moją aplikację Kalendarz, a moją aplikację Pokaż. Chcę Pokaż, aby wywołać kalendarz, wyrenderuj szablon, a następnie wstaw wynik do szablonu z Pokaż.

W tym celu użyłem TemplateResponse zamiast HttpResponse na stronie kalendarza:

# Calendar view 

from django.template.response import TemplateResponse 

def render_calendar(request): 
    return TemplateResponse(request, 'calendar/calendar-template.html', {}) 

Następnie na trasę strony, uzyskać instancję TemplateResponse, powoływać się na swój sposób render() i wreszcie wstawić rendered_content wewnątrz kontekstu:

# Show view 

from calendar import views 

def show(request, show_id): 
    cal = views.render_calendar(request) 
    cal.render() 
    context = {"calendar": cal.rendered_content} 
    return render_to_response("show/show-template.html", context) 

I to wystarczy!

0

jakby ...

Jest szablon {% ssi %} że pozwala to jeden szablon wewnątrz drugiego, jedyna rzecz to trzeba będzie przechodzić szablonu nadrzędnego wszystkie zmienne kontekstowe potrzebne w inny szablon.

+0

tak ... chodzi o to, że moje "aplikacje boczne" (podobne do widżetów) są bardzo niezależne i nie chcę obsłużyć wszystkich zmiennych wszystkich aplikacji w jednym miejscu. – Firas

+0

@Firas Nie jestem świadomy żadnego innego sposobu, przepraszam, może ktoś inny będzie wiedział ... – Ngenator

+0

Thx iway, doceniam to – Firas

Powiązane problemy