Welcome | Get started | Dive into Lino | Contribute | Topics | Reference | More

Your First Lino Project

This document is a continuation of the multipart tutorial for doing a Lino project to publish a blog site. If you did not go through Part 02 of this tutorial please do so before proceeding with this document, unless of course you feel competent enough to follow.

Part 03 - Installing blogs plugin and running a server

In this part of the tutorial we will install the blogs plugin in our project that lino provides for us and run a local server to see our work this far in action.

Installing blogs plugin

We will modify whitewall/lib/whitewall/settings.py file, remember every other projects or sites inherits from this file, any changes we do in this file will be reflected on every other site that we have in our project.

Let's take a first look at some of the content of this file:

class Site(Site):
    ...
    def get_installed_plugins(self):
        """Implements :meth:`lino.core.site.Site.get_installed_plugins`.

        """
        yield super(Site, self).get_installed_plugins()
        yield 'whitewall.lib.users'
        yield 'whitewall.lib.whitewall'

Here, as always, the three dots "..." implies and will imply that there are some code there which we ignore because they do not concern us for the moment. To try to understand the method get_installed_plugins() by looking at this code we can conclude that it's calling super, yield super(Site, self).get_installed_plugins() so that Lino's internal dependencies plugins are loaded properly and after calling super it's installing two more plugins here:

yield 'whitewall.lib.users'
yield 'whitewall.lib.whitewall'

The users and whitewall plugin that we have within our project. If we write more plugins with more capabilities we will also have to pass them through this method so that they are loaded into our site.

To install the blogs plugin in our project we only have to add this line of code yield 'lino_xl.lib.blogs' to this method. And after doing so our Site object now look like the following:

class Site(Site):
    ...
    def get_installed_plugins(self):
        """Implements :meth:`lino.core.site.Site.get_installed_plugins`.

        """
        yield super(Site, self).get_installed_plugins()
        yield 'whitewall.lib.users'
        yield 'whitewall.lib.whitewall'
        yield 'lino_xl.lib.blogs'

We now have blog functionalities within our project. Let's try to run a a site on local machine and see how our site looks like.

Running a server

We can have multiple sites within our whitewall/projects/ directory but at the moment we only have whitewall1 as our only site. Before running the server we need to populate our database with the model schemas and to do that let's cd into the whitewall/projects/whitewall1 directory and run the following command:

$ pm prep

Your will be prompted to ask for confirmation. Press RETURN key to confirm and lino will take y (for yes) as the default value. This will populate our database.

Now, do the following command:

$ runserver

And this will run a local server and you will see some information about our server in your console, the last bit of which should look like this:

Django version 3.2.5, using settings 'whitewall.projects.whitewall1.settings.demo'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Your django version may vary but otherwise everything should be the same. Here, http://127.0.0.1:8000/ is the address:port to which our server is listening for requests. Open up your favorite browser and visit the link: http://127.0.0.1:8000/.