1. 添加简单新网页¶
Evennia 利用 Django,这是一个Web开发框架。 大型专业网站都是用 Django 制作的,且有大量的文档(和书籍)可供参考。 我们鼓励你至少看看 Django 的基础教程。在这里,我们将简单介绍一下它的工作原理,以帮助你入门。
我们假设你已安装并设置好了 Evennia。默认情况下,Evennia 安装包中自带了一个 Web 服务器和网站。你可以通过将网页浏览器指向 http://localhost:4001
来查看默认网站。你将看到一个包含一些游戏统计信息和 Evennia Web 客户端链接的通用欢迎页面。
在本教程中,我们将添加一个新页面,你可以在 http://localhost:4001/story
访问它。
1.1. 创建视图¶
Django 的“视图”是一个普通的 Python 函数,Django 调用它来渲染你将在网页浏览器中看到的 HTML 页面。Django 可以利用视图函数对页面进行各种酷炫的操作,例如添加动态内容或即时更改页面,不过在这里,我们将简单地返回原始 HTML。
打开 mygame/web/website
文件夹,并在其中创建一个名为 story.py
的新模块文件。(如果你想保持整洁,也可以把它放在自己的文件夹中,但如果这样做,请不要忘记在新文件夹中添加一个空的 __init__.py
文件。添加 __init__.py
文件告诉 Python 可以从新文件夹中导入模块。对于本教程,你的新 story.py
模块的示例内容应如下所示:
# 在 mygame/web/website/story.py 中
from django.shortcuts import render
def storypage(request):
return render(request, "story.html")
上述视图利用了 Django 提供的一个快捷方式:render。渲染快捷方式从请求中提供模板信息。例如,它可以提供游戏名称,并进行渲染。
1.2. HTML 页面¶
接下来,我们需要找到 Evennia(和 Django)查找 HTML 文件的位置,这些文件在 Django 的术语中被称为 模板。你可以在设置中指定这些位置(有关更多信息,请参见 default_settings.py
中的 TEMPLATES
变量),但在这里我们将使用现有的位置。
导航到 mygame/web/templates/website/
,并在其中创建一个名为 story.html
的新文件。由于这不是 HTML 教程,因此该文件的内容将很简单:
{% extends "base.html" %}
{% block content %}
<div class="row">
<div class="col">
<h1>关于一棵树的故事</h1>
<p>
这是一个关于一棵树的故事,一个经典的故事……
</p>
</div>
</div>
{% endblock %}
如上所示,Django 使我们能够轻松扩展我们的基本样式,因为我们使用了 render 快捷方式。如果你希望不利用 Evennia 的基本样式,你可以选择这样做:
<html>
<body>
<h1>关于一棵树的故事</h1>
<p>
这是一个关于一棵树的故事,一个经典的故事……
</p>
</body>
</html>
1.3. URL¶
当你在网页浏览器中输入地址 http://localhost:4001/story
时,Django 将解析端口后的内容 - 在这里是 /story
- 以便找出你希望显示的页面。Django 如何知道 /story
应该链接到哪个 HTML 文件呢?你需要在 mygame/web/website/urls.py
文件中告诉 Django 这些地址模式对应的文件。现在在编辑器中打开它。
Django 在此文件中查找变量 urlpatterns
。你需要将新的 story
模式和相应的路径添加到 urlpatterns
列表中,然后再将其与默认的 urlpatterns
合并。它的样子可以如下所示:
"""
此处重新路由从一个 URL 到一个 Python 视图函数/类。
主要的 web/urls.py 包含所有 URL(URL 根)的这些路由,
以便可以重定向到所有网站页面。
"""
from django.urls import path
from web.website import story
from evennia.web.website.urls import urlpatterns as evennia_website_urlpatterns
# 在这里添加模式
urlpatterns = [
# path("url-pattern", imported_python_view),
path(r"story", story.storypage, name="Story"),
]
# 被 Django 读取
urlpatterns = urlpatterns + evennia_website_urlpatterns
上述代码从我们早前创建的 mygame/web/website/
中导入了我们的 story.py
Python 视图模块,并添加了相应的 path
实例。path
的第一个参数是我们希望查找的 URL 模式("story"
)作为正则表达式,然后是我们希望调用的来自 story.py
的视图函数。
就这样。重新加载 Evennia - evennia reload
- 你现在应该能够在浏览器中访问 http://localhost:4001/story
,并查看你的新故事页面是如何通过 Python 渲染的!