Yet Another Static Page Django app.
Project description
===========
django-yasp
===========
.. image:: https://badge.fury.io/py/django-yasp.png
:target: https://badge.fury.io/py/django-yasp
.. image:: https://travis-ci.org/fgmacedo/django-yasp.png?branch=master
:target: https://travis-ci.org/fgmacedo/django-yasp
Another static page Django app.
Documentation
-------------
The full documentation is at https://django-yasp.readthedocs.org.
Quickstart
----------
Install django-yasp::
pip install django-yasp
Include it on INSTALLED_APPS::
'yasp',
Add to urls:
.. code-block:: python
url(r'^', include('yasp.urls', namespace='yasp')),
Add to middlewares:
.. code-block:: python
MIDDLEWARE_CLASSES = [
...
'yasp.middleware.StaticPageFallbackMiddleware',
]
Features
--------
Link to static pages
====================
Static pages in **yasp** are automatic routed to a slug that you specify when
creating your page. Your static pages can be grouped in a `Menu`_ object. So
your urls can be in the form `menu-slug/page-slug` or `page-slug` (pages
without a relation to `Menu`_.
To create a link to static pages, there are some useful templatetags, as follows.
.. note::
All menus/pages that are used in a templatetag will be automatically
created if they don't exist.
To load all pages inside a menu:
.. code-block:: django
{% load yasp %}
{% get_pages_from_menu 'about-us' as pages %}
<ul>
{% for page in pages %}
<li><a href="{{page.get_absolute_url}}">{{page.title}}</a></li>
{% endfor %}
</ul>
To get a specific page:
.. code-block:: django
{% load yasp %}
{% get_page 'about-us/vision' as page %} {# Page 'vision' related to a menu 'about-us' #}
<a href="{{page.get_absolute_url}}">{{page.title}}</a>
{% get_page 'contact' as page %} {# Page without a menu. #}
<a href="{{page.get_absolute_url}}">{{page.title}}</a>
To get a URL to a specific page:
.. code-block:: django
{% load yasp %}
<a href="{% get_page_url 'about-us/vision' %}">Our vision</a>
Custom templates
================
Static pages will be rendered using the `yasp/default.html` template by
default.
You can customize the template used to render a page by placing a template with
the same slug of the page, or directly on the `template` field on Admin.
Template path resolution order:
* The "Template" field of your page, if provided.
* 'yasp/{menu_slug}/{page_slug}.html'
* 'yasp/{}.html'.format(page_slug)
* 'yasp/default.html'
Context of a static page template:
:menu: The `Menu`_ object.
:content: The `FlatPage`_ object.
:object: Alias to `content`.
External link
=============
You can use a static page instance to link to an external page.
Example:
>>> from yasp.models import Menu, FlatPage
>>> menu = Menu.objects.create(name='About us', slug='about-us')
>>> page = FlatPage.objects.create(menu=menu, slug='google', link='http://google.com', title='Google')
>>> '<a href="{}">{}</a>'.format(page.get_absolute_url(), page.title)
'<a href="http://google.com">Google Inc.</a>'
>>> vision = FlatPage.objects.create(menu=menu, slug='vision', title='Vision')
>>> '<a href="{}">{}</a>'.format(vision.get_absolute_url(), vision.title)
'<a href="/about-us/vision">Vision</a>'
This construction is can be specially useful when you're build a navbar in
templates:
.. code-block:: django
{% load yasp %}
{% get_pages_from_menu 'about-us' as pages %}
<ul>
{% for page in pages %}
<li><a href="{{page.get_absolute_url}}">{{page.title}}</a></li>
{% endfor %}
</ul>
Will render as:
.. code-block:: html
<ul>
<li><a href="http://google.com">Google</a></li>
<li><a href="/about-us/vision">Vision</a></li>
</ul>
Running Tests
--------------
Does the code actually work?
::
source <YOURVIRTUALENV>/bin/activate
(myenv) $ pip install -r requirements_test.txt
(myenv) $ py.test
History
-------
0.1.0 (2016-09-26)
++++++++++++++++++
* First release on PyPI.
django-yasp
===========
.. image:: https://badge.fury.io/py/django-yasp.png
:target: https://badge.fury.io/py/django-yasp
.. image:: https://travis-ci.org/fgmacedo/django-yasp.png?branch=master
:target: https://travis-ci.org/fgmacedo/django-yasp
Another static page Django app.
Documentation
-------------
The full documentation is at https://django-yasp.readthedocs.org.
Quickstart
----------
Install django-yasp::
pip install django-yasp
Include it on INSTALLED_APPS::
'yasp',
Add to urls:
.. code-block:: python
url(r'^', include('yasp.urls', namespace='yasp')),
Add to middlewares:
.. code-block:: python
MIDDLEWARE_CLASSES = [
...
'yasp.middleware.StaticPageFallbackMiddleware',
]
Features
--------
Link to static pages
====================
Static pages in **yasp** are automatic routed to a slug that you specify when
creating your page. Your static pages can be grouped in a `Menu`_ object. So
your urls can be in the form `menu-slug/page-slug` or `page-slug` (pages
without a relation to `Menu`_.
To create a link to static pages, there are some useful templatetags, as follows.
.. note::
All menus/pages that are used in a templatetag will be automatically
created if they don't exist.
To load all pages inside a menu:
.. code-block:: django
{% load yasp %}
{% get_pages_from_menu 'about-us' as pages %}
<ul>
{% for page in pages %}
<li><a href="{{page.get_absolute_url}}">{{page.title}}</a></li>
{% endfor %}
</ul>
To get a specific page:
.. code-block:: django
{% load yasp %}
{% get_page 'about-us/vision' as page %} {# Page 'vision' related to a menu 'about-us' #}
<a href="{{page.get_absolute_url}}">{{page.title}}</a>
{% get_page 'contact' as page %} {# Page without a menu. #}
<a href="{{page.get_absolute_url}}">{{page.title}}</a>
To get a URL to a specific page:
.. code-block:: django
{% load yasp %}
<a href="{% get_page_url 'about-us/vision' %}">Our vision</a>
Custom templates
================
Static pages will be rendered using the `yasp/default.html` template by
default.
You can customize the template used to render a page by placing a template with
the same slug of the page, or directly on the `template` field on Admin.
Template path resolution order:
* The "Template" field of your page, if provided.
* 'yasp/{menu_slug}/{page_slug}.html'
* 'yasp/{}.html'.format(page_slug)
* 'yasp/default.html'
Context of a static page template:
:menu: The `Menu`_ object.
:content: The `FlatPage`_ object.
:object: Alias to `content`.
External link
=============
You can use a static page instance to link to an external page.
Example:
>>> from yasp.models import Menu, FlatPage
>>> menu = Menu.objects.create(name='About us', slug='about-us')
>>> page = FlatPage.objects.create(menu=menu, slug='google', link='http://google.com', title='Google')
>>> '<a href="{}">{}</a>'.format(page.get_absolute_url(), page.title)
'<a href="http://google.com">Google Inc.</a>'
>>> vision = FlatPage.objects.create(menu=menu, slug='vision', title='Vision')
>>> '<a href="{}">{}</a>'.format(vision.get_absolute_url(), vision.title)
'<a href="/about-us/vision">Vision</a>'
This construction is can be specially useful when you're build a navbar in
templates:
.. code-block:: django
{% load yasp %}
{% get_pages_from_menu 'about-us' as pages %}
<ul>
{% for page in pages %}
<li><a href="{{page.get_absolute_url}}">{{page.title}}</a></li>
{% endfor %}
</ul>
Will render as:
.. code-block:: html
<ul>
<li><a href="http://google.com">Google</a></li>
<li><a href="/about-us/vision">Vision</a></li>
</ul>
Running Tests
--------------
Does the code actually work?
::
source <YOURVIRTUALENV>/bin/activate
(myenv) $ pip install -r requirements_test.txt
(myenv) $ py.test
History
-------
0.1.0 (2016-09-26)
++++++++++++++++++
* First release on PyPI.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
django-yasp-0.4.1.tar.gz
(12.6 kB
view hashes)
Built Distribution
Close
Hashes for django_yasp-0.4.1-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1e65a79f302082f816bdc7e5af0c1e7f99c3a879fd77994dc487f0b89fa15122 |
|
MD5 | 3e5c951788dd50d4526a1e9a479e8c19 |
|
BLAKE2b-256 | 472b05b75c3581fadae43256cb814944897bb747d9934391ea07c41335eb5f92 |