星期三, 八月 08, 2007

浅尝Python Web 框架:Django

1.介绍

Django 是一个高级 Python web framework,遵守BSD版权,它鼓励快速开发和干净的、MVC 设计,包括一个模板系统,对象相关的映射和用于动态创建管理界面的框架。使用 Django,我们在几分钟之内就可以创建高品质、易维护、数据库驱动的应用程序。

Django 的名字是从一位比利时爵士音乐家来的。这是从 Django 的 FAQ 中看到的。这位音乐家名叫: Django Reinhardt ,他是一个吉普赛人,主要以演奏吉它为主,还演奏过小提琴等。在1930年到1950年初的这段日子里,他被认为是最好的吉它演奏家。根据百科全书的说 明,django的发音为: zhane-go (’a’发长音)

Django 项目是一个定制框架,它源自一个在线新闻 Web 站点,于 2005 年以开源的形式被释放出来。Django 框架的核心组件有:

  • 用于创建模型的对象关系映射
  • 为最终用户设计的完美管理界面
  • 一流的 URL 设计
  • 设计者友好的模板语言
  • 缓存系统


2.安装Django

Django 当前最新的官方版本是0.96。单击这里下载。然后解压,执行以下使命来安装:

tar xzvf Django-0.96.tar.gz
cd Django-0.96
sudo python setup.py install

3.Django 的管理工具

在安装Django 之后,就有一个可用的Django 管理工具:django-admin.py。在终端或者命令行下,输入命令:django-admin.py,会显示如下的帮助信息:

Usage: django-admin.py action [options]
actions:
adminindex [appname …]
Prints the admin-index template snippet for the given app name(s).

createcachetable [tablename]
Creates the table needed to use the SQL cache backend
dbshell
Runs the command-line client for the current DATABASE_ENGINE

….


4.1 创建Django 项目和应用程序

要新建一个Web 项目, 先在命令行的模式下,进入你想建立项目的目录,执行以下命令:django-admin startproject,例如:

~/Python$ django-admin startproject mysite

上面的命令将会在~/Python 下创建mysite 文件夹,其中包含了运行Django 项目的基本配置文件:


__init__.py
manage.py
settings.py
urls.py


现在,在项目上建立一个应用程序(aplication),以职位公告板”jobs” 为例子:

~/Python/mysite$ python manage.py startapp jobs

上面将建立一个应用程序的骨架,jobs 目录如下:


__init__.py
models.py
views.py


为了使项目知道新的应用程序存在,需要在settings.py 文件中的INSTALLED_APPS 添加一个条目(‘mysite.jobs’):

INSTALLED_APPS = (
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.sites’,
‘mysite.jobs’,
)

4.2 创建一个模型(Model)

Django 提供了自己的对象关系型数据映射组件(object-relational mapper,ORM)库,它可以通过 Python 对象接口支持动态数据库访问。这个 Python 接口非常有用,功能十分强大,但如果需要,也可以灵活地不使用这个接口,而是直接使用 SQL。

ORM 目前提供了对 PostgreSQL、MySQL、SQLite 和 Microsoft® SQL 数据库的支持。

在新建模型之前,需要对settings.py 文件进行数据库的配置。本例以SQLite3 为例:

DATABASE_ENGINE = ’sqlite3′
DATABASE_NAME = ‘~/Sqlite/test.db’ DATABASE_USER = ”
DATABASE_PASSWORD = ”
DATABASE_HOST = ”
DATABASE_PORT = ”

这个职位公告板应用程序有两种类型的对象:Location 和 Job。Location 包含 city、state(可选)和 country 字段。Job 包含 location、title、description 和 publish date 字段。jobs/models.py 文件内容如下:

from django.db import models

# Create your models here.
class Location(models.Model):
city = models.CharField(maxlength=50)
state = models.CharField(maxlength=50, null=True, blank=True)
country = models.CharField(maxlength=50)

def __str__(self):
if self.state:
return “%s, %s, %s” % (self.city, self.state, self.country)
else:
return “%s, %s” % (self.city, self.country)

class Job(models.Model):
pub_date = models.DateField()
job_title = models.CharField(maxlength=50)
job_description = models.TextField()
location = models.ForeignKey(Location)

def __str__(self):
return “%s (%s)” % (self.job_title, self.location)

__str__ 方法是 Python 中的一个特殊类,它返回对象的字符串表示。Django 在 Admin 工具中显示对象时广泛地使用了这个方法。

执行python manage.py sql jobs 可以看到模型在数据库里的模式:


~/Python/mysite$ python manage.py sql jobs

BEGIN;
CREATE TABLE “jobs_job” (
“id” integer NOT NULL PRIMARY KEY,
“pub_date” date NOT NULL,
“job_title” varchar(50) NOT NULL,
“job_description” text NOT NULL,
“location_id” integer NOT NULL
);
CREATE TABLE “jobs_location” (
“id” integer NOT NULL PRIMARY KEY,
“city” varchar(50) NOT NULL,
“state” varchar(50) NULL,
“country” varchar(50) NOT NULL
);
COMMIT;


运行数据库命令 syncdb 后,将会初始化并安装这个模型:
~/Python/mysite$ python manage.py syncdb

注意syncdb 命令要求我们创建一个超级用户帐号。这是因为 django.contrib.auth 应用程序(提供基本的用户身份验证功能)默认情况下是在 INSTALLED_APPS 设置中提供的。超级用户名和密码用来登录将在下一节介绍的管理工具。记住,这是 Django 的超级用户,而不是系统的超级用户。

4.3 使用带图形界面的Admin 管理工具

Django 的最大卖点之一是其一流的管理界面,为我们的项目提供了很多数据输入工具。实质上,管理工具是也是一个应用程序,不过是Django 内置。与 jobs 应用程序一样,在使用之前也必须进行安装。第一个步骤是将应用程序的模块(django.contrib.admin)添加到 INSTALLED_APPS 设置中。修改 settings.py 的内容如下:

INSTALLED_APPS = (
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.sites’,
‘djproject.jobs’,
‘django.contrib.admin’,
)

要让该管理工具可以通过 /admin URL 使用必须对URL 进行配置,修改urls.py 的内容如下:

from django.conf.urls.defaults import *

urlpatterns = patterns(”,
(r’^admin/’, include(’django.contrib.admin.urls’)),)

这个管理应用程序有自己的数据库模型,但也需要进行安装。我们可以再次使用 syncdb 命令来完成这个过程:

~/Python/mysite$ python manage.py syncdb

启动Django 内置的测试服务器:

~/Python/mysite$ python manage.py runserver

Validating models…
0 errors found.

Django version 0.96, using settings ‘mysite.settings’
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

现在可以在浏览器里输入 http://localhost:8000/admin 启动管理工具,并使用前面创建的超级用户帐号进行登录。

要让模型的类可以通过管理工具进行访问,我们需要为其创建一个 Admin 子类。然后可以通过为这个子类添加类属性来定制如何对每个类进行管理。以下是修改后的jobs/models.py 的内容:

from django.db import models

# Create your models here.
class Location(models.Model):
city = models.CharField(maxlength=50)
state = models.CharField(maxlength=50, null=True, blank=True)
country = models.CharField(maxlength=50)

def __str__(self):
if self.state:
return “%s, %s, %s” % (self.city, self.state, self.country)
else:
return “%s, %s” % (self.city, self.country)

class Admin:
list_display = (”city”,”state”,”country”)

class Job(models.Model):
pub_date = models.DateField()
job_title = models.CharField(maxlength=50)
job_description = models.TextField()
location = models.ForeignKey(Location)

def __str__(self):
return “%s (%s)” % (self.job_title, self.location)

class Admin:
list_display = (”job_title”,”location”,”pub_date”)
ordering = [”-pub_date”]
search_fields=(”jab_title”,”job_description”)
list_filter = (”location”,)

现在就可以通过管理界面来创建、更新和删除 Location 和Jobs 记录了。


4.4 配置URL

Django URL 分发系统使用了正则表达式配置模块,它可以将URL 字符串模式映射到特定的views。这个系统允许URL 与底层代码完全脱节,从而实现最大的控制和灵活性。

项目下的urls.py 模块是URL 的默认配置点(也可以通过 settings.py 模块中的ROOT_URLCONF 值重新设置)。URL 配置文件的惟一要求是必须包含一个定义模式 urlpatterns 的对象。

这个职位公告板应用程序会在启动时打开一个索引和一个详细视图,它们可以通过以下的 URL 映射进行访问:

  • /jobs 索引视图:显示最近的 10 个职位
  • /jobs/1 详细视图:显示 ID 为 1 的职位信息

这两个视图(索引视图和详细视图)都是在这个 jobs 应用程序的 views.py 模块中实现的。在项目的 urls.py 文件中实现这种配置看起来如下所示:

from django.conf.urls.defaults import *

urlpatterns = patterns(”,
(r’^admin/’, include(’django.contrib.admin.urls’)),
(r’^jobs/$’, ‘mysite.jobs.views.index’),
(r’^jobs/(?Pd+)/$’, ‘mysite.jobs.views.detail’),
)

注意 部分,这在后面非常重要。

最佳实践是提取出应用程序特有的 URL 模式,并将它们放入应用程序自身中。这样可以取消应用程序与项目的耦合限制,从而更好地实现重用。jobs 使用的应用程序级的 URL 配置文件(jobs/urls.py)如下所示:

from django.conf.urls.defaults import *

urlpatterns = patterns(’mysite.jobs.views’,
(r’^$’, ‘index’),
(r’^(?P
d+)/$’, ‘detail’),
)

注意:由于 view 方法现在都是来自同一个模块,因此第一个参数可以使用这个模块的根名称来指定 djproject.jobs.views,Django 会使用它来查找 index 方法和 detail 方法。

再将项目下的urls.py 更改为以下内容:

from django.conf.urls.defaults import *

urlpatterns = patterns(”,
(r’^admin/’, include(’django.contrib.admin.urls’)),
(r’^jobs/’, include(’mysite.jobs.urls’)),
)

4.5 实现视图

视图是一个简单的 Python 方法,它接受一个请求对象,负责实现:

  • 任何业务逻辑(直接或间接)
  • 上下文字典,它包含模板数据
  • 使用一个上下文来表示模板
  • 响应对象,它将所表示的结果返回到这个框架中

在 Django 中,当一个 URL 被请求时,所调用的 Python 方法称为一个视图(view),这个视图所加载并呈现的页面称为模板(template)。由于这个原因,Django 小组将 Django 称为一个 MVT(model-view-template)框架。

下面将获取最近的 10 个职位,并通过一个模板呈现出来,然后返回响应。jobs/views.py 的内容如下:

from django.template import Context, loader
from django.http import HttpResponsefrom jobs.models import Job

def index(request):
object_list = Job.objects.order_by(’-pub_date’)[:10]
t = loader.get_template(’jobs/job_list.html’)
c = Context({
‘object_list’: object_list,
})
return HttpResponse(t.render(c))

在上面的代码中,模板是由 jobs/job_list.html 字符串进行命名的。该模板是使用名为 object_list 的职位列表的上下文呈现的。所呈现的模板字符串随后被传递到 HTTPResponse 构造器中,后者通过这个框架被发送回请求客户机那里。

加载模板、创建内容以及返回新响应对象的步骤在下面都被 render_to_response 方法取代了。新增内容是详细视图方法使用了一个 get_object_or_404 方法,通过该方法使用所提供的参数获取一个 Job 对象。如果没有找到这个对象,就会触发 404 异常。这两个方法减少了很多 Web 应用程序中的样板代码。修改jobs/views.ps 的内容:

from django.shortcuts import get_object_or_404, render_to_response
from jobs.models import Job

def index(request):
object_list = Job.objects.order_by(’-pub_date’)[:10]
return render_to_response(’job_list.html’,
{’object_list’: object_list})

def detail(request, object_id):
job = get_object_or_404(Job, pk=object_id)
return render_to_response(’job_detail.html’,
{’object’: job})

注意detail 使用 object_id 作为一个参数。这是前面提到过的 jobs/urls.py 文件中 /jobs/ URL 路径后面的数字。它以后会作为参数传递给 get_object_or_404 方法。

4.6 创建模板

Django 提供了一种模板语言,该语言可以快速呈现和易于使用。Django 模板是利用 {{ variables }}{% tags %} 标记嵌入文本来创建的。模板可以用来生成任何基于文本的格式,包括 HTML、XML、CSV 和纯文本。

第一个步骤是定义将模板加载点。为了简便起见,我们需要在mysite 项目 下面创建一个 templates 目录,并将这个路径添加到settings.py 的TEMPLATE_DIRS 条目中:

TEMPLATE_DIRS = (
‘~/Python/mysite/templates/’,
)

Django 模板支持模板继承(template inheritance)的概念,它允许设计人员创建一个统一的外表,而不用替换每个模板的内容。我们可以通过使用块标记定义骨干文档或基础文档来使用继承。这些块标记都是使用一些包含内容的页面模板来填充的。这个例子给出了一个包含称为 titleextraheadcontent 的块的 HTML 骨干。templates/base.html 文件的内容如下:

  “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>


Company Site: {% block title %}Page{% endblock %}
{% block extrahead %}{% endblock %}


{% block content %}{% endblock %}

为了取消应用程序与项目之间的耦合,我们使用了一个中间基本文件templates/jobs/base.html 作为Jobs 应用程序所有页面文件的基础。对于这个例子来说,为了简便起见,我们将应用程序的CSS 放到这个基本文件中。在实际的应用程序中,需要有一个正确配置的Web 服务器,将这个CSS 提取出来,并将其放到Web 服务器所服务的静态文件中。templates/jobs/base.html 文件的内容如下:

{% extends “base/base.html” %}

{% block extrahead %}

{% endblock %}

现在我们要创建视图所加载并呈现的两个页面模板。templates/jobs/job_list.html 模板简单地循环遍历 object_list,它通过索引视图遍历其内容,并显示一个到每条记录的详细页面的链接。templates/jobs/job_list.html 内容如下:

{% extends “base.html” %}

{% block title %}Job List{% endblock %}

{% block content %}

Job List



{% endblock %}

templates/jobs/job_detail.html 模板页面会显示一条job 的记录。templates/jobs/job_detail.html 文件内容如下:

{% extends “base.html” %}

{% block title %}Job Detail{% endblock %}

{% block content %}

Job Detail





{{ object.job_title }}
-
{{ object.location }}


Posted: {{ object.pub_date|date:”d-M-Y” }}


{{ object.job_description }}


{% endblock %}

项目已经基本完成,可以到浏览器里测试下结果。今天就到此告一段落~~

星期六, 八月 04, 2007

Ubuntu 随笔

自从Ubuntu 6.10,就已经开始使用Ubuntu ,这也是使用过的第二个Linux 操作系统的发行版。第一个是RedHat,版本大概是9.0 吧,那时还在大学……用了还不到一个月,就将RedHat 束之高阁了。但Ubuntu 不同,真想不到经过几年,Linux 操作系统会变得如此简单易用,界面友好,现在对Ubuntu 真是爱不释手,日常的工作基本上都在Ubuntu 上解决,发觉已经离Windows 越来越远了 :)

简单介绍下Ubuntu 吧。Ubuntu(国 际音标: /ùbúntú/) 是一个以桌面应用为主的Linux操作系统,其名称来自非洲南部祖鲁语或豪萨语的「ubuntu」一词,意思是「人道待人」。Ubuntu 建基于Debian 发行版和GNOME 桌面环境,而与Debian 的不同之处在于,其每6个月发布一次,且每次发布的版本均提供为期18个月的支援。Ubuntu 的目标在于为一般用户提供一个最新的,也是相当稳定的只使用自由软件的操作系统。而Ubuntu 具有庞大的社群支持,用户可以方便地寻求协助。

Ubuntu 承诺

* Ubuntu 将永远免费, 包括企业版和安全升级.
* Ubuntu 将由 Canonical公司 以及全球数百个公司来提供商业支持.
* Ubuntu 包含了由自由软件团体提供的最佳翻译和人性化架构.
* Ubuntu 光盘仅仅包含了自由软件; 我们鼓励您使用自由和开放源码的软件, 改善和传播它.

星期四, 七月 05, 2007

2007年亞洲盃足球賽球場



2007年亞洲盃足球賽決賽週將於2007年7月7日至7月29日在東南亞四國印尼、馬來西亞、泰國及越南舉行,今屆賽事是歷史上首次由四個國家共同協辦的國際體育賽事。

原本由1956年創辦的亞洲盃以每四年舉行一屆,但直到2008年的第十四屆亞洲盃為避免與歐洲國家盃及奧運會這兩項國際重大體育賽事的賽期衝突,亞洲足協決定改變傳統,將比賽推前一年至2007年舉行,之後繼續每四年舉行賽事。

本次賽事將于四個城市的八個體育場進行,在比賽還沒開幕之前,大家在GE 上一睹八個賽場的風采(有一個賽場貌似還在修建中。。。)。

下載


印尼雅加達的Bung Karno Stadium


  雅加達主賽場:格羅拉蓬卡諾體育場

  (Gelora Bung Karno Stadium)

  亞洲最大的體育場之一,為1962年亞運會而建。它是印尼衆多大型體育賽事的舉辦地,其中包括3次東南亞運動會及2002年、2004年的老虎杯比賽。

印尼巨港的Jakabaring Stadium

  巨港賽場:Jaka Baring Stadium

  巨港是位于印度尼西亞蘇門答臘島東南部的一個港口城市,該體育場建于2003年,可容納4萬名觀衆。

馬來西亞吉隆坡的National Stadium, Bukit Jalil


吉隆坡主賽場:武吉加裏爾國家體育場

  (National Stadium Bukit Jalil)

  該體育場建于1998年,能容納10萬人,是1998年英聯邦運動會會場。

馬來西亞沙亞港的Shah Alam Stadium

  吉隆坡副賽場:莎阿南體育場(Shah Alam Stadium)

  莎阿南體育場是一個多功能體育場,這個體育場建造于1991年,能夠容納69372人。該體育場是馬來西亞雪蘭莪州足球隊的主場,並且也是大多數馬來西亞足協主辦的比賽的場地,該體育場還曾經在1997年舉辦過世青賽。

泰國曼榖的Rajmangala Stadium

  曼谷主賽場:拉加曼加拉國家體育場

  (Rajamangala National Stadium)

  修建于1998年,當時是為曼谷亞運會而建造,之後曾經承辦了2004年的女足世青賽,容量達到65000人,是目前泰國最大的體育場。

泰國曼榖的Suphachalasai Stadium


  曼谷副賽場:Supachalasai Stadium

  是泰國BEC俱樂部的主場。

越南河內的My Dinh National Stadium


  河內主賽場:美亭國家體育場

  (My Dinh National Stadium)

  是越南國家體育聯合體的中心標志性建築,于2003年9月正式開放,並且成為當年東南亞運動會的主辦場館,是越南最大的體育場,擁有40000個座位。

越南胡志明市Army Stadium

  胡志明賽場:武裝體育場(Army Stadium)

  該體育場靠近胡志明市國際機場,是該市最大的體育場。

星期二, 五月 22, 2007

點燃激情,傳遞夢想──北京2008 奧運火炬接力傳遞


  北京奥运会火炬接力将以“和谐之旅”为主题,以“点燃激情 传递梦想”为口号,前往五大洲(国家、地区)的22个城市,并在境内31个省、自治区和直辖市传递,还将抵达世界最高峰――珠穆朗玛峰。传递时间为130 天,传递总里程约13.7万公里。北京奥运会火炬接力将是奥运史上传递路线最长、传递范围最广、参与人数最多的一次火炬接力,将在奥林匹克运动史上谱写辉 煌的篇章。

以下是火炬的傳遞計劃路線────



本人根據上面的路線,在Google Earth 上制作了一個Path 地標。

點擊下載

地標一覽(包括1個Path 和若幹線路經過的城市地標)────


Path 一覽────




每個城市地標都是帶有當地的風光圖片的────


中國內地的城市地標是圖文并茂的────



P.S
地標上的圖文均來源于北京奧運官方網

星期三, 五月 02, 2007

倫敦馬拉松(Flora London Marathon)Path 地標


  倫敦馬拉松誕生于1981年,當時是受了紐約馬拉松的啓發而生成。倫敦馬拉松每年4月下旬舉行,絕對是每一個跑手的節日,寬闊的場地、景色優美的路線、熱情的觀衆、排山倒海般的歡呼聲,再加上快速的路線和幾乎完美無瑕的組織工作,這一切無疑深深吸引著那些馬拉松資深跑手。

  倫敦馬拉松曾經是曆史上産生男女世界最好成績最多的城市,但那是在早期。20世紀80年代後期,受到幾個高獎金美國賽事的挑戰,倫敦馬拉松組織者急中生智,在比賽中增加了化妝隊伍,使比賽別開生面,還常有新娘身穿婚紗和穿西服領帶的新郎攜手跑完42公裏195米的距離。

路線:

從位于倫敦西南的布萊克希思格林尼治公園出發,經過國會大廈和白金漢宮,抵達靠近聖瓊斯公園的終點,沿途可以欣賞到倫敦許多著名的曆史名勝。雖然路線曲折、迂回,甚至某些地方可以說狹窄,但沒有山坡。


規模:

超過3萬人

P.S

在2007年的倫敦馬拉松賽中,中國選手周春秀以2小時20分38秒的成績奪得冠軍,成為第一位奪得該賽事冠軍的中國選手。圖片——



根據官方的資料,本人製作了一個關於2007 Flora London Marathon 的Path 地標(點擊下載地標)。地標中包括了Path 地標和一些線路周邊的風景名勝地標。大家下載後,可以利用 Google Earht 的Tour 功能,沿著線路欣賞下倫敦優美的風景名勝,希望大家喜歡 :)

補充

要開啟Google Earth 的Tour 功能,可以同時按下“Ctrl + alt + P”。同時,可以開啟Google Earht 的3D Layer 層,會有更加好的效果。

Google Earth 下的相關圖片——





2007 倫敦馬拉松的相關圖片——








星期三, 三月 28, 2007

迷你歐洲公園(Mini-Europe)



  “小歐洲” 是布魯塞爾的歐洲各國著名景觀微縮公園的簡稱,又稱“迷你歐洲”,位于布魯塞爾西北部風景如畫的布魯塞爾公園內。它的南面是著名的“原子球”,北面是為紀念比利時獨立100周年所建的著名的“百年宮”,這三大景觀呈鼎足之勢,交相輝映,相得益彰,令世界各國旅遊者神往。 “小歐洲”占地25萬平方米,裏面荟萃了歐洲聞名世界的宮殿、教堂、修道院、古堡、神廟、廣場、港口、高塔和名人的故居等300多個名勝古迹,從各個不同的側面反映了歐洲的曆史、文化、藝術和科學技術的發展,同時也表達了歐洲各國要求加強歐洲聯合的願望。    

  進入公園進“小歐洲”參觀是要買門票的,但若持有歐盟、北約或比利時的記者證,不僅可免費入內參觀,還可以免費索取有關“小歐洲”好幾種語言的各種資料。一進“小歐洲”的大門,便可看到一幢“X”型的獨特的高大建築模型,這就是位于布魯塞爾舒曼廣場附近的歐盟委員會辦公大樓的模型。大樓前面有歐盟15國的國旗在迎風飄揚,給你的第一印象是明顯的,即歐洲已經開始聯合了。再往裏走就是歐洲各國的名勝古迹的模型了,每個模型都被道路、河流、綠化植被、山、湖泊等模型隔離開。因為我記不清順序,更記不住全部300多名勝古迹的名稱,在此只能列出一些國家一些古迹的名稱。其中有法國巴黎的埃菲爾鐵塔、凱旋門、聖心教堂、英國倫敦的大本鍾和西敏寺,德國柏林的勃蘭登堡門和波恩的貝多芬故居,意大利的比薩斜塔和威尼斯的聖馬丁廣場,比利時布魯塞爾的大廣場和根特大教堂,西班牙馬德裏的埃斯科略修道院、鬥牛場和聖馬丁、皮納裏奧大教堂,荷蘭的風車和鹿特丹港,希臘雅典的衛城和神廟等,還有歐洲國家聯合研制的阿麗亞娜火箭“空中客車”飛機和歐洲高速火車等,其造型千姿百態,形象逼真,真令人歎為觀止。    

  公園內的真實景物 “小歐洲”內的景物只是真實景物的1/25,除埃菲爾鐵塔和一些高大建築比人略高一些外,其中絕大部分景物都比人矮。著名的荷蘭風車像一個伸出雙臂的曆史巨人站立在河邊,而在這裏卻在孩子的胯下;比薩斜塔是一座9層樓高的世界名塔,而在“小歐洲”裏只有兩米多高;飛機、火車、巨輪和大卡車在這裏就像是商店裏賣的兒童玩具、人和小汽車比人的小姆頭還小。小歸小,但卻和真景實物一模一樣,無論從整體上看,還是從局部上看,都完全一模一樣,不僅形似,而且也神似,令人贊歎不已。為了使一些景觀具有真實感並增加它的娛樂性,設計者們在修建小歐洲時還運用了當代科技中的電子、聲、光技術,特地請比利時一些遊樂場的專家們參加這些影觀的設計和施工。現在看來,其效果非常好,因為它不僅使“小歐洲”有了“靜中有動”的特點,而且還使參觀者興致盎然,同時也增加了經濟效益。只要你按動有關電鈕,就會出現以下活動的景面:在西班牙的鬥牛場上,一頭被激怒的、剽悍公牛會衝向手揮紅布的鬥牛士,觀衆歡聲雷動:在火箭發射場,阿裏亞娜火箭已進入倒記時,突然,火箭尾部噴射出火焰,轟然升空;在貨物雲集的鹿特丹港,吊車正在忙著裝卸貨物;在愛爾蘭綠草如茵的牧場上,羊群正在低頭吃草,突然,一頭牧羊犬便衝著你“汪、汪、汪”狂吠;在法國戴高樂機場,“空中客車”正在跑道上滑行;在英國泰晤士河上,一艘豪華遊艇在遊弋;在德國柏林牆邊,大吊車正在吊著一塊水泥牆板;在波恩貝多芬故居,裏面傳出了貝多芬《第九交響曲》中的《歡樂頌》的樂聲。特別是在夜幕降臨的時候,“小歐洲”內裝在各個微型建築上的幾千盞燈齊亮,園內一片輝煌,景色極為壯觀。

Google Earth 下的迷你歐洲公園——


相關圖片——