This Django application adds a FAQ engine to sites built with django-fluent CMS.
Features:
- Multilingual
- Multisite
- Categories and questions
- SEO fields (meta keywords, description)
Used applications:
- Multilingual support based on django-parler.
- Optional integration with django-taggit and django-taggit-autocomplete-modified for tag support
- Optional integration with django-fluent-pages
- Optional integration with django.contrib.sitemaps
First install the module, preferably in a virtual environment:
git clone https://github.com/edoburu/django-fluent-faq.git
cd django-fluent-faq
pip install .
# Install the plugins of fluent-contents that you use:
pip install django-fluent-contents[text]
# Optional: to add tagging support + autocomplete use:
pip install django-taggit django-taggit-autocomplete-modified
Add the applications to settings.py
:
INSTALLED_APPS += (
# FAQ engine
'fluent_faq',
# The content plugins
'fluent_contents',
'fluent_contents.plugins.text',
# Support libs
'categories',
'categories.editor',
'django_wysiwyg',
# Optional tagging
'taggit',
'taggit_autocomplete_modified',
)
DJANGO_WYSIWYG_FLAVOR = "yui_advanced"
Note that not all applications are required;
tagging is optional, and so are the various fluent_contents.plugin.*
packages.
Include the apps in urls.py
:
urlpatterns += patterns('',
url(r'^admin/util/taggit_autocomplete_modified/', include('taggit_autocomplete_modified.urls')),
url(r'^faq/', include('fluent_faq.urls')),
)
The database can be created afterwards:
./manage.py syncdb
In case additional plugins of django-fluent-contents are used, follow their installation instructions as well. Typically this includes:
- adding the package name to
INSTALLED_APPS
. - running
pip install django-fluent-contents[pluginname]
- running
./manage.py syncdb
To limit which plugins for django-fluent-contents can be used in the FAQ answer, use:
FLUENT_CONTENTS_PLACEHOLDER_CONFIG = {
'faq_answer': {
'plugins': (
'TextPlugin', 'PicturePlugin', 'OEmbedPlugin', 'SharedContentPlugin', 'RawHtmlPlugin',
),
},
}
To display the blog contents, a fluent_faq/base.html
file needs to be created.
This will be used to map the output of the module to your site templates.
The base template needs to have the blocks:
content
- displays the main contentsidebar_content
- displays the sidebar contenttitle
- the title fragment to insert to the<title>
tag.meta-title
- the full contents of the<title>
tag.meta-description
- thevalue
of the meta-description tag.meta-keywords
- thevalue
for the meta-keywords tag.og-type
- the OpenGraph type for Facebook (optional)og-description
the OpenGraph description for Facebook (optional)
The fluent_faq/base.html
template could simply remap the block names to the site's base.html
template.
For example:
{% extends "base.html" %}
{% block headtitle %}{% block title %}{% endblock %}{% endblock %}
{% block main %}
{# This area is filled with the question details:
{% block content %}{% endblock %}
{# Add any common layout, e.g. a sidebar here #}
{% block sidebar_content %}{% endblock %}
{% endblock %}
When all other block names are already available in the site's base.html
template,
this example should be sufficient.
Optionally, the blog pages can be included in the sitemap.
Add the following in urls.py
:
from fluent_faq.sitemaps import FaqQuestionSitemap, FaqCategorySitemap
sitemaps = {
'faq_questions': FaqQuestionSitemap,
'faq_categories': FaqCategorySitemap,
}
urlpatterns += patterns('',
url(r'^sitemap.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}),
)
To integrate with the page types of django-fluent-pages, don't include fluent_blogs.urls
in the URLconf:
urlpatterns += patterns('',
url(r'^admin/util/taggit_autocomplete_modified/', include('taggit_autocomplete_modified.urls')),
)
Instead, add a page type instead:
INSTALLED_APPS += (
'fluent_pages',
'fluent_faq.pagetypes.faqpage',
)
A "FAQ Module" page can now be created in the page tree of django-fluent-pages at the desired URL path.
This module is designed to be generic, and easy to plug into your site. In case there is anything you didn't like about it, or think it's not flexible enough, please let us know. We'd love to improve it!
If you have any other valuable contribution, suggestion or idea, please let us know as well because we will look into it. Pull requests are welcome too. :-)