Как включить динамический шаблон из другого приложения в Django? - PullRequest
1 голос
/ 12 июля 2009

У меня сейчас есть два приложения:

app1/
app2/
templates/
    app1.html
    app2.html

В app1.html я включаю app2.html:

<!-- app1.html -->
{% include "app2.html" %}

app2 имеет некоторый динамический контент:

<!-- app2.html -->
{% app2_value %}

Когда я отображаю app1.html, значение app2_value не отображается. Какой лучший способ справиться с вышесказанным в Django?

Ответы [ 3 ]

2 голосов
/ 12 июля 2009

Django на самом деле не обрабатывает динамически, в том числе, как PHP или другие языки. Вместо этого у вас должен быть базовый шаблон и использовать наследование шаблонов и блоки для выполнения того, что вы пытаетесь сделать.

Таким образом, ваш app2.html будет иметь такое же динамическое содержимое, но в app1.html будет место для переопределения или вставки.

app2.html:

{% block 'title' %}
{{ app2.title }}
{% endblock %}

{% block 'content' %}
{% endblock %}

Шаблон App1 может затем расширить App2:

app1.html:

{% extends "app2.html" %}

{% block 'title' %}
Actually App 1!
{% endblock %}

{block 'content' %}
...
{% endblock %}

К сожалению, обработка включений все еще является новой в Django и противоречит лучшим практикам из того, что я видел в документации и сообществе.

0 голосов
/ 12 июля 2009

Вы можете визуализировать храм в виде строки, а затем отправить его в другой шаблон для отображения. Вам все равно нужно будет отправить переменные в шаблон, который вы обрабатываете, в виде строки. Хорошим вариантом использования было бы использование одного и того же шаблона для особой визуализации списка или диктов.

0 голосов
/ 12 июля 2009

В Django ваши представления и ваши шаблоны отделены друг от друга, поэтому, когда вы используете {% app2_value%} в шаблоне, он будет считать, что он был передан ему из вызывающего представления.

Итак, чтобы ответить на ваш вопрос, чтобы отобразить это значение, передайте его в шаблон app1 в любом представлении, которое вы используете для его вызова:

# app1 views.py
from django.shortcuts import render_to_response
import app2

def app1_view(request):
    return render_to_response('app1.html', {'app2_value': app2.somevalue})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...