Site-wide adds a definition or a link for specialized terms.
Project description
Site-wide adds a definition or a link for specialized terms.
Requirements
Mandatory
Django (tested with 1.4)
Optional
django-tinymce (tested with 1.5.1b2) to type the definition in a beautiful GUI (see TERMS_DEFINITION_WIDGET)
django-ckeditor (tested with 3.6.2.1) to type the definition in another beautiful GUI (see TERMS_DEFINITION_WIDGET)
django-reversion (tested with 1.6.0) to recover changes and deletions
django-CMS (tested with 2.3) because django-terms has an apphook and a menu
django-haystack (tested with 2.0.0-beta) because django-terms has a search index
django.contrib.sitemaps because django-terms has a sitemap
South (tested with 0.7.6) because django-terms has migrations
Installation
[sudo] pip install django-terms
Add 'terms', to your INSTALLED_APPS
./manage.py syncdb (./manage.py migrate terms if you use South)
Add terms to your urls:
add url(r'^terms/', include('terms.urls')), to your urls.py
or, if you are using django-CMS, add a page and use the apphook and menu
Usage
Add some terms in the admin
Choose how django-terms should apply to your website:
Middleware (to give django-terms a try or for development)
Template filter (for production)
The added terms should now be automatically linked to their definitions.
Middleware
A middleware is available to automatically add links on all your website. It is not recommended to use it in production because it parses and rebuilds whole pages, which can be an overkill in most cases (even though django-terms has excellent performances).
It is also perfect for development: it never fails silently, unlike filters (see Exceptions for more details).
Add 'terms.middleware.TermsMiddleware', to your MIDDLEWARE_CLASSES
If the middleware applies to unwanted Django applications, HTML tags, classes, or IDs, set the corresponding Common settings
Template filter
A template filter is available to add links only on desired parts of your website.
Choose one of your existing templates
Add {% load terms %} to the beginning of the file (just after {% extends '[file]' %} if you have one)
Use the filter replace_terms like every normal filter
If the filter applies to unwanted HTML tags, classes, or IDs, set the corresponding Common settings
Example:
Suppose you have such a template:
{% extends 'base.html' %} {% block article_header %} {{ article.header }} {% endblock %} {% block article_content %} {{ article.section1 }} {{ article.section2 }} {% endblock %}Here is how you can modify it:
{% extends 'base.html' %} {% load terms %} {% block article_header %} {{ article.header|replace_terms }} {% endblock %} {% block article_content %} {% filter replace_terms %} {{ article.section1 }} {{ article.section2 }} {% endfilter %} {% endblock %}Now, suppose you have an HTML class code-snippet in article.section2 where you do not want to add links on terms. Go to Common settings, and you will find the solution:
Add this line in settings.py:
TERMS_ADDITIONAL_IGNORED_CLASSES = ['code-snippet']
Settings
Common settings
TERMS_ADDITIONAL_IGNORED_APPS
- Default:
()
- Definition:
A list or tuple of ignored Django applications (expressed as strings)
- Used by:
- Extends:
- Syntax example:
['cms']
TERMS_ADDITIONAL_IGNORED_CLASSES
- Default:
()
- Definition:
A list or tuple of ignored HTML classes (expressed as strings)
- Used by:
- Extends:
- Syntax example:
['footnote', 'text-caption']
TERMS_ADDITIONAL_IGNORED_IDS
- Default:
()
- Definition:
A list or tuple of ignored HTML IDs (expressed as strings)
- Used by:
- Extends:
- Syntax example:
['article-footer', 'side-content']
TERMS_REPLACE_FIRST_ONLY
- Default:
True
- Definition:
If set to True, adds a link only on the first occurrence of each term
- Used by:
TERMS_DEFINITION_WIDGET
- Default:
'auto'
- Definition:
Explicitly tells django-terms which text widget to choose for the definition of a term. Accepted values are 'auto', 'basic', 'tinymce', and 'ckeditor'.
Advanced settings
These settings should not be used, unless you know perfectly what you are doing.
TERMS_IGNORED_APPS
- Default:
see terms/settings.py
- Definition:
A list or tuple of ignored Django applications (expressed as strings)
- Used by:
TERMS_IGNORED_CLASSES
- Default:
see terms/settings.py
- Definition:
A list or tuple of ignored HTML classes (expressed as strings)
- Used by:
TERMS_IGNORED_IDS
- Default:
see terms/settings.py
- Definition:
A list or tuple of ignored HTML IDs (expressed as strings)
- Used by:
Troubleshooting
Side effects
Why?
When using django-terms, your HTML pages are totally or partially reconstructed:
totally reconstructed if you use the middleware (see Middleware)
partially reconstructed if you use the filter (see Template filter)
The content is parsed with HTMLParser, then rebuilt. See NeutralHTMLReconstructor and TermsHTMLReconstructor in tems/html.py to understand exactly how it is rebuilt.
List of known side effects
A few side effects are therefore happening during HTML reconstruction:
Entity names and numbers (e.g. é, é, …) are unescaped. This means they are replaced with their unicode characters (e.g. é -> é)
Additional spaces inside HTML tags are stripped:
Start tags <a href = "url" > -> <a href="url">
End tags </ a > -> </a>
“Start-end” tags <input style = "text" /> -> <input style="text" />
Exceptions
Resolver404
- Raised by:
Middleware only.
- Raised in:
DEBUG mode. Otherwise the page is ignored by django-terms.
- Reason:
This happens when django-terms is unable to resolve the current request.path to determine whether the application of the current page is in TERMS_IGNORED_APPS.
- Encountered:
In django-CMS 2.3, when adding a plugin in frontend editing.
HTMLValidationWarning
- Raised by:
- Raised in:
DEBUG mode. Otherwise we try to make terms replacements work anyway.
- Reason:
This happens when django-terms finds a problem in the architecture of the current HTML page.
- Encountered:
If your HTML page is malformed; if you forget a start tag, an end tag, or the final / of a “start-end” tag.
Translations
Status
Write your translation
Localization is done directly on our Transifex page. There is no access restriction, so feel free to spend two minutes translating django-terms to your language :o)
Get & Compile
Make sure you have transifex-client installed: [sudo] pip install transifex-client
Pull all translations from Transifex: tx pull -a
Compile them: cd terms && django-admin.py compilemessages
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file django-terms-0.4.7.tar.gz
.
File metadata
- Download URL: django-terms-0.4.7.tar.gz
- Upload date:
- Size: 15.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 781087d54368d25dd1c7604594b41af67cff15bd0e22f7198bd53c05274ffcb6 |
|
MD5 | 18f71435eb462f4f5b459d649653355d |
|
BLAKE2b-256 | 8d2702dcfc0e2ac684450c5ce17a3229bcdf68444f0841e54de474241a709b43 |