aboutsummaryrefslogtreecommitdiffstats
path: root/docs/creating-a-site.txt
blob: 41985c92c2f627495d2d7d22f8f4e12d53f6c4d7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
.. slug: creating-a-site-not-a-blog-with-nikola
.. date: 2013/03/01 12:49:41
.. tags: nikola, python
.. link:
.. description:

Creating a Site (Not a Blog) with Nikola
========================================

One of the most frequent questions I get about Nikola is "but how do 
I create a site that's not a blog?". And of course, that's because the
documentation is heavily blog-oriented. This document will change that ;-)

Since it started, Nikola has had the capabilities to create generic sites. For example,
Nikola's `own site <http://nikola.ralsina.com.ar>`_ is a fairly generic one. Let's go
step by step on how you can do something like that.

As usual when starting a nikola site, you start with ``nikola init`` which creates a
empty semi-configured site::

    $ nikola init mysite
    Created empty site at mysite.

Then we go into the new ``mysite`` folder, and make the needed changes in the ``conf.py``
configuration file:

.. code-block:: python


    ##############################################
    # Configuration, please edit
    ##############################################


    # Data about this site
    BLOG_AUTHOR = "Roberto Alsina"
    BLOG_TITLE = "Not a Blog"
    # This is the main URL for your site. It will be used
    # in a prominent link
    SITE_URL = "http://notablog.ralsina.com.ar"
    BLOG_EMAIL = "ralsina@kde.org"
    BLOG_DESCRIPTION = "This is a demo site (not a blog) for Nikola."

    #
    # Some things in the middle you don't really need to change...
    #

    post_pages = (
        ("pages/*.txt", "", "story.tmpl", False),
    )

And now we are ready to create our first page::

    $ nikola new_post -p
    Creating New Post
    -----------------

    Enter title: index
    Your post's text is at:  pages/index.txt

.. note:: The ``-p`` option in the ``nikola new_post`` command means we are creating a page and not a blog post.

We can now build and preview our site::

    $ nikola build
    Scanning posts.done!
    .  render_site:output/categories/index.html
    .  render_sources:output/index.txt
    .  render_rss:output/rss.xml
    :
    :
    : [Much more of the same]

    $ nikola serve
    Serving HTTP on 127.0.0.1 port 8000 ...

And you can see your (very empty) site in http://localhost:8000

So, what's in that ``pages/index.txt`` file?

.. code-block:: rest

    .. title: index
    .. slug: index
    .. date: 2013/03/01 10:26:17
    .. tags:
    .. link:
    .. description:


    Write your post here.

Title is the page title, slug is the name of the generated HTML file
(in this case it would be ``index.html``) the date doesn't matter much in
not-blogs, same for tags and link. Description is useful for SEO purposes
if you care for that.

And below, the content. By default you are expected to use
`reStructured text <http://nikola.ralsina.com.ar/quickstart.html>`_ but
Nikola supports a ton of formats, including Markdown, plain HTML, BBCode,
Wiki, and Textile.

So, let's give the page a nicer title, and some fake content. Since the default
Nikola theme (called "site") is based on `bootstrap <http://twitter.github.com/bootstrap/>`_
you can use anything you like from it:

.. code-block:: rest

    .. title: Welcome To The Fake Site
    .. slug: index
    .. date: 2013/03/01 10:26:17
    .. tags:
    .. link:
    .. description: Fake Site version 1, welcome page!


    .. class:: hero-unit span6

    .. admonition:: This is a Fake Site

        It pretends to be about things, but is really just an example.
        So, don't click this button, it leads nowhere.

        .. class:: btn

        Click Me!


    .. class:: span5

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris non nunc turpis.
    Phasellus a ullamcorper leo. Sed fringilla dapibus orci eu ornare. Quisque
    gravida quam a mi dignissim consequat. Morbi sed iaculis mi. Vivamus ultrices
    mattis euismod. Mauris aliquet magna eget mauris volutpat a egestas leo rhoncus.
    In hac habitasse platea dictumst. Ut sed mi arcu. Nullam id massa eu orci
    convallis accumsan. Nunc faucibus sodales justo ac ornare. In eu congue eros.
    Pellentesque iaculis risus urna. Proin est lorem, scelerisque non elementum at,
    semper vel velit. Phasellus consectetur orci vel tortor tempus imperdiet. Class
    aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos
    himenaeos.

    [And more in the same vein]

.. admonition:: TIP: Nice URLs

   If you like your URLs without the ".html" then you want to create folders and
   put the pages in ``index.html`` inside them. Example::

       nikola new_post -p pages/foo/index.txt

   which will create a page you could access as "http://yoursite.com/foo"

And that's it. You will want to change the SIDEBAR_LINKS option to create a reasonable
"menu" for your site, you will want to hack the theme (check ``nikola help bootswatch_theme``
for a quick & dirty solution), and you may want to add a blog later on, for company news
or whatever.

.. admonition:: TIP: So, how do I add a blog now?

    First, change the ``post_pages`` option like this:

    .. code-block:: python

        post_pages = (
            ("pages/*.txt", "", "story.tmpl", False),
            ("posts/*.txt", "blog", "post.tmpl", True),
        )

    And to avoid a conflict (because blogs try to generate ``/index.html``:

    .. code-block:: python

        INDEX_PATH = "blog"

    Create a post with ``nikola new_post`` and that's it, you now have a blog
    in http://yoursite.com/blog (you may want to add links to it in SIDEBAR_LINKS of course).

You can see the finished site in http://notablog.ralsina.com.ar and its full configuration in
http://ralsina.com.ar/listings/notablog/conf.py.html

I hope this was helpful!