Updated HTML docs

This commit is contained in:
Griatch 2021-10-26 21:41:11 +02:00
parent 66d0ad0bc9
commit 7900aad365
2073 changed files with 32986 additions and 41197 deletions

View file

@ -14,6 +14,8 @@
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/language_data.js"></script>
<script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/x-mathjax-config">MathJax.Hub.Config({"tex2jax": {"processClass": "tex2jax_process|mathjax_process|math|output_area"}})</script>
<link rel="shortcut icon" href="../_static/favicon.ico"/>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@ -38,7 +40,7 @@
<div class="bodywrapper">
<div class="body" role="main">
<section id="web-character-view-tutorial">
<section class="tex2jax_ignore mathjax_ignore" id="web-character-view-tutorial">
<h1>Web Character View Tutorial<a class="headerlink" href="#web-character-view-tutorial" title="Permalink to this headline"></a></h1>
<p><strong>Before doing this tutorial you will probably want to read the intro in [Basic Web tutorial](Web-
Tutorial).</strong></p>
@ -46,13 +48,13 @@ Tutorial).</strong></p>
and all other pages we want to make specific to our game, well need to create our own Django “app”</p>
<p>Well call our app <code class="docutils literal notranslate"><span class="pre">character</span></code>, since it will be dealing with character information. From your game
dir, run</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">evennia</span> <span class="n">startapp</span> <span class="n">character</span>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>evennia startapp character
</pre></div>
</div>
<p>This will create a directory named <code class="docutils literal notranslate"><span class="pre">character</span></code> in the root of your game dir. It contains all basic
files that a Django app needs. To keep <code class="docutils literal notranslate"><span class="pre">mygame</span></code> well ordered, move it to your <code class="docutils literal notranslate"><span class="pre">mygame/web/</span></code>
directory instead:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">mv</span> <span class="n">character</span> <span class="n">web</span><span class="o">/</span>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>mv character web/
</pre></div>
</div>
<p>Note that we will not edit all files in this new directory, many of the generated files are outside
@ -60,9 +62,9 @@ the scope of this tutorial.</p>
<p>In order for Django to find our new web app, well need to add it to the <code class="docutils literal notranslate"><span class="pre">INSTALLED_APPS</span></code> setting.
Evennias default installed apps are already set, so in <code class="docutils literal notranslate"><span class="pre">server/conf/settings.py</span></code>, well just extend
them:</p>
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="n">INSTALLED_APPS</span> <span class="o">+=</span> <span class="p">(</span><span class="s1">&#39;web.character&#39;</span><span class="p">,)</span>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">INSTALLED_APPS</span> <span class="o">+=</span> <span class="p">(</span><span class="s1">&#39;web.character&#39;</span><span class="p">,)</span>
</pre></div>
</td></tr></table></div>
</div>
<blockquote>
<div><p>Note: That end comma is important. It makes sure that Python interprets the addition as a tuple
instead of a string.</p>
@ -73,23 +75,16 @@ know what URL should trigger the view. The pattern may also provide some informa
we shall see.</p>
<p>Here is our <code class="docutils literal notranslate"><span class="pre">character/urls.py</span></code> file (<strong>Note</strong>: you may have to create this file if a blank one
wasnt generated for you):</p>
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span>
<span class="normal">4</span>
<span class="normal">5</span>
<span class="normal">6</span>
<span class="normal">7</span>
<span class="normal">8</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="c1"># URL patterns for the character app</span>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># URL patterns for the character app</span>
<span class="kn">from</span> <span class="nn">django.conf.urls</span> <span class="kn">import</span> <span class="n">url</span>
<span class="kn">from</span> <span class="nn">web.character.views</span> <span class="kn">import</span> <span class="n">sheet</span>
<span class="kn">from</span> <span class="nn">web.character.views</span> <span class="kn">import</span> <span class="n">sheet</span>
<span class="n">urlpatterns</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">url</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;^sheet/(?P&lt;object_id&gt;\d+)/$&#39;</span><span class="p">,</span> <span class="n">sheet</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s2">&quot;sheet&quot;</span><span class="p">)</span>
<span class="p">]</span>
</pre></div>
</td></tr></table></div>
</div>
<p>This file contains all of the URL patterns for the application. The <code class="docutils literal notranslate"><span class="pre">url</span></code> function in the
<code class="docutils literal notranslate"><span class="pre">urlpatterns</span></code> list are given three arguments. The first argument is a pattern-string used to
identify which URLs are valid. Patterns are specified as <em>regular expressions</em>. Regular expressions
@ -118,25 +113,7 @@ superuser you create in the beginning (#1). Thus, the griefer can get 50% of the
need to hijack the admin account (the admins username) just by navigating to <code class="docutils literal notranslate"><span class="pre">sheet/1</span></code>!</p>
</div></blockquote>
<p>Next we create <code class="docutils literal notranslate"><span class="pre">views.py</span></code>, the view file that <code class="docutils literal notranslate"><span class="pre">urls.py</span></code> refers to.</p>
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="c1"># Views for our character app</span>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># Views for our character app</span>
<span class="kn">from</span> <span class="nn">django.http</span> <span class="kn">import</span> <span class="n">Http404</span>
<span class="kn">from</span> <span class="nn">django.shortcuts</span> <span class="kn">import</span> <span class="n">render</span>
@ -156,7 +133,7 @@ need to hijack the admin account (the admins username) just by navigating to
<span class="s2">&quot;Found something else instead.&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;character/sheet.html&#39;</span><span class="p">,</span> <span class="p">{</span><span class="s1">&#39;character&#39;</span><span class="p">:</span> <span class="n">character</span><span class="p">})</span>
</pre></div>
</td></tr></table></div>
</div>
<p>As explained earlier, the URL pattern parser in <code class="docutils literal notranslate"><span class="pre">urls.py</span></code> parses the URL and passes <code class="docutils literal notranslate"><span class="pre">object_id</span></code> to
our view function <code class="docutils literal notranslate"><span class="pre">sheet</span></code>. We do a database search for the object using this number. We also make
sure such an object exists and that it is actually a Character. The view function is also handed a
@ -171,52 +148,7 @@ available as the variable “character”.</p>
<p>The html template is created as <code class="docutils literal notranslate"><span class="pre">templates/character/sheet.html</span></code> under your <code class="docutils literal notranslate"><span class="pre">character</span></code> app folder.
You may have to manually create both <code class="docutils literal notranslate"><span class="pre">template</span></code> and its subfolder <code class="docutils literal notranslate"><span class="pre">character</span></code>. Heres the template
to create:</p>
<div class="highlight-html notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span>
<span class="normal">28</span>
<span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span>
<span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span>{% extends &quot;base.html&quot; %}
<div class="highlight-html notranslate"><div class="highlight"><pre><span></span>{% extends &quot;base.html&quot; %}
{% block content %}
<span class="p">&lt;</span><span class="nt">h1</span><span class="p">&gt;</span>{{ character.name }}<span class="p">&lt;/</span><span class="nt">h1</span><span class="p">&gt;</span>
@ -263,7 +195,7 @@ to create:</p>
{% endif %}
{% endblock %}
</pre></div>
</td></tr></table></div>
</div>
<p>In Django templates, <code class="docutils literal notranslate"><span class="pre">{%</span> <span class="pre">...</span> <span class="pre">%}</span></code> denotes special in-template “functions” that Django understands.
The <code class="docutils literal notranslate"><span class="pre">{{</span> <span class="pre">...</span> <span class="pre">}}</span></code> blocks work as “slots”. They are replaced with whatever value the code inside the
block returns.</p>
@ -284,17 +216,13 @@ skills the user has, or if the user is approved (assuming your game has an appro
<p>The last file we need to edit is the master URLs file. This is needed in order to smoothly integrate
the URLs from your new <code class="docutils literal notranslate"><span class="pre">character</span></code> app with the URLs from Evennias existing pages. Find the file
<code class="docutils literal notranslate"><span class="pre">web/urls.py</span></code> and update its <code class="docutils literal notranslate"><span class="pre">patterns</span></code> list as follows:</p>
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span>
<span class="normal">4</span>
<span class="normal">5</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="c1"># web/urls.py</span>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># web/urls.py</span>
<span class="n">custom_patterns</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">url</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;^character/&#39;</span><span class="p">,</span> <span class="n">include</span><span class="p">(</span><span class="s1">&#39;web.character.urls&#39;</span><span class="p">))</span>
<span class="p">]</span>
</pre></div>
</td></tr></table></div>
</div>
<p>Now reload the server with <code class="docutils literal notranslate"><span class="pre">evennia</span> <span class="pre">reload</span></code> and visit the page in your browser. If you havent
changed your defaults, you should be able to find the sheet for character <code class="docutils literal notranslate"><span class="pre">#1</span></code> at
<code class="docutils literal notranslate"><span class="pre">http://localhost:4001/character/sheet/1/</span></code></p>
@ -302,22 +230,17 @@ changed your defaults, you should be able to find the sheet for character <code
immediately.</p>
<p>As an optional final step, you can also change your character typeclass to have a method called
get_absolute_url.</p>
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span>
<span class="normal">4</span>
<span class="normal">5</span>
<span class="normal">6</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="c1"># typeclasses/characters.py</span>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># typeclasses/characters.py</span>
<span class="c1"># inside Character</span>
<span class="k">def</span> <span class="nf">get_absolute_url</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="kn">from</span> <span class="nn">django.urls</span> <span class="kn">import</span> <span class="n">reverse</span>
<span class="k">return</span> <span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;character:sheet&#39;</span><span class="p">,</span> <span class="n">kwargs</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;object_id&#39;</span><span class="p">:</span><span class="bp">self</span><span class="o">.</span><span class="n">id</span><span class="p">})</span>
</pre></div>
</td></tr></table></div>
</div>
<p>Doing so will give you a view on site button in the top right of the Django Admin Objects
changepage that links to your new character sheet, and allow you to get the link to a characters
page by using {{ object.get_absolute_url }} in any template where you have a given object.</p>
page by using <code class="docutils literal notranslate"><span class="pre">{{</span> <span class="pre">object.get_absolute_url</span> <span class="pre">}}</span></code> in any template where you have a given object.</p>
<p><em>Now that youve made a basic page and app with Django, you may want to read the full Django
tutorial to get a better idea of what it can do. <a class="reference external" href="https://docs.djangoproject.com/en/1.8/intro/tutorial01/">You can find Djangos tutorial
here</a>.</em></p>
@ -363,7 +286,7 @@ here</a>.</em></p>
<h3>Versions</h3>
<ul>
<li><a href="Web-Character-View-Tutorial.html">1.0-dev (develop branch)</a></li>
<li><a href="../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
<li><a href="../../0.95/index.html">0.95 (v0.9.5 branch)</a></li>
</ul>
</div>